|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
WD 9 - Recherche dans une table (sans loupe) |
Débuté par justinien, 23 jan. 2006 18:40 - 4 réponses |
| |
| | | |
|
| |
Posté le 23 janvier 2006 - 18:40 |
Bonjour à tous,
Le problème est simple à expliquer :
Le but est de permettre à l'utilisateur de "voyager" dans une table en tapant au clavier des lettres ou des chiffres correspondant aux informations d'une colonne précise. En fait, simuler le résultat de la loupe mais en restant dans la table.
Pourquoi ce besoin : Car il s'agit d'une application ou l'utilisation de la souris doit être quasi inexistante.
Un exemple : Supposons la table suivante :
Compte Libellé Montant -------------------------------------------------- 61001 Loyer 2500 61002 Location mobilier 1000 61003 Location voiture 500 61201 Entretien locaux 1200 etc
Ce qu'on aimerait : Pouvoir taper sur le clavier par exemple 612... et voir le bandeau de la table se positionner sur le premier compte commençant par 612... Ensuite l'utilisateur sélectionne le compte par ENTER par exemple ...
ET LE TOUT, sans passer par la loupe ou un champ de recherche ! Car cela demande de se trouver dans le Champ en question et dans ce cas on perd le focus de la table. Je ne veux pas que l'utilisateur soit obligé de se positionner dans la loupe ou un champ de recherche pour "voyager" dans la table !
Est-ce faisable +/- simplement avec WINDEV....
J'avais pensé à la commande TOUCHEENFONCEE !? Mais j'ai peur que ce ne soit pas aussi simple à mettre en place ...
Merci de votre aide
Jean-Pascal Cochet jpc@fiskobel.com |
| |
| |
| | | |
|
| | |
| |
Posté le 24 janvier 2006 - 20:56 |
Ai eu un petit problème du même genre que j'ai résolu de la façon suivante. Si elle peut t'aider ... ============================================================= Soit une fenêtre TARIF comportant une table TABLE (Affichage seulement)
Créer un champ de saisie Saisie , dans fenêtre TARIF, en dehors de TABLE, avec libellé &RECHERCHE (donc lettre d'appel R) Param : saisie non obligatoire, effacement auto Désigner SAISIE comme 1er champ où se positionnera le curseur
Créer un bouton FICHE comme 2eme champ de positionnement curseur et donnant accès à la fiche détaillée.
Soient les colonnes de la table TABLE
col. CODE (chaine de caractère),col2,col3... etc
(La col CODE est supposée être déjà triée)
===== Code Entrée dans SAISIE: ============ moimeme="" // facultatif
===== Code Sortie de SAISIE ================
nTailleSaisie,I sont entiers bTrouve est booléen nTailleSaisie=SansEspace(Taille(MoiMême))
SI TableOccurrence(Table)>1 ALORS SI nTailleSaisie>0 ALORS
POUR I=1 A TableOccurrence(Table) TableSelectPlus(Table,I) SI Gauche(Table.CODE,nTailleSaisie)~=MoiMême ALORS btrouve=Vrai SORTIR FIN FIN
SI btrouve=Faux ALORS TableSelectPlus(Table,1) RepriseSaisie(MoiMême)
FIN FIN FIN
====================================================== A l'ouverture de la fenêtre, le curseur se place dans le champ SAISIE L'utilisateur tape la chaine recherchée (ou une partie de la chaine) puis ENTER (ou TAB) Si la chaine est trouvée, la barre se positionne sur la ligne (premiers caractères égaux trouvés) On peut alors ouvrir FICHE par un deuxième ENTER. Sinon on peut revenir sur SAISIE par la lettre d'appel "R". On ajuste avec les flèches haut et bas.
Au retour de FICHE le curseur se repositionne dans le champ SAISIE grâce à : Reprisesaisie(SAISIE) en fin de code du bouton
Si la chaine n'est pas trouvée on revient au début de la table et dans le champ SAISIE
(On ne perd pas le focus de la fenêtre.) =======================================================
Si le code recherché est immédiatement trouvé, deux coups d'ENTER successifs suffisent pour accéder à la fiche. |
| |
| |
| | | |
|
| | |
| |
Posté le 24 janvier 2006 - 22:33 |
Bonsoir Charles,
Un grand merci pour ta réponse très pertinente. Seul "hic", je veux éviter de devoir utiliser une lettre d'appel pour revenir dans le champ de saisie.
J'ai un programme développé en FoxPro (je crois) et il y avait des tables toutes simples qui permettaient cependant de "voyager" dans la table sans jamais avoir besoin de la souris. Cela dit, il y avait bien un champ de recherche qui affichait les touches tapées au clavier MAIS sans jamais perdre le focus de la table ET surtout sans jamais avoir besoin d'être pointé dessus !
Peut-être faut-il chercher au niveau de la gestion des événements windows avec la commande Evénement() !?
Qu'en penses-tu ?
Merci de ton aide !
JPC
"Charles" <mandoman@numericable.fr> a écrit dans le message de news: 43d6660d$1@news.pcsoft.fr...
Ai eu un petit problème du même genre que j'ai résolu de la façon suivante. Si elle peut t'aider ... ============================================================= Soit une fenêtre TARIF comportant une table TABLE (Affichage seulement)
Créer un champ de saisie Saisie , dans fenêtre TARIF, en dehors de TABLE, avec libellé &RECHERCHE (donc lettre d'appel R) Param : saisie non obligatoire, effacement auto Désigner SAISIE comme 1er champ où se positionnera le curseur
Créer un bouton FICHE comme 2eme champ de positionnement curseur et donnant accès à la fiche détaillée.
Soient les colonnes de la table TABLE
col. CODE (chaine de caractère),col2,col3... etc
(La col CODE est supposée être déjà triée)
===== Code Entrée dans SAISIE: ============ moimeme="" // facultatif
===== Code Sortie de SAISIE ================
nTailleSaisie,I sont entiers bTrouve est booléen nTailleSaisie=SansEspace(Taille(MoiMême))
SI TableOccurrence(Table)>1 ALORS SI nTailleSaisie>0 ALORS
POUR I=1 A TableOccurrence(Table) TableSelectPlus(Table,I) SI Gauche(Table.CODE,nTailleSaisie)~=MoiMême ALORS btrouve=Vrai SORTIR FIN FIN
SI btrouve=Faux ALORS TableSelectPlus(Table,1) RepriseSaisie(MoiMême)
FIN FIN FIN
====================================================== A l'ouverture de la fenêtre, le curseur se place dans le champ SAISIE L'utilisateur tape la chaine recherchée (ou une partie de la chaine) puis ENTER (ou TAB) Si la chaine est trouvée, la barre se positionne sur la ligne (premiers caractères égaux trouvés) On peut alors ouvrir FICHE par un deuxième ENTER. Sinon on peut revenir sur SAISIE par la lettre d'appel "R". On ajuste avec les flèches haut et bas.
Au retour de FICHE le curseur se repositionne dans le champ SAISIE grâce à : Reprisesaisie(SAISIE) en fin de code du bouton
Si la chaine n'est pas trouvée on revient au début de la table et dans le champ SAISIE
(On ne perd pas le focus de la fenêtre.) =======================================================
Si le code recherché est immédiatement trouvé, deux coups d'ENTER successifs suffisent pour accéder à la fiche.
|
| |
| |
| | | |
|
| | |
| |
Posté le 26 janvier 2006 - 16:12 |
pas compliqué: tu met un champ dans lequel il va renter son numero à rechercher. par exe le nombre 620. puis tu parcours ta table: nbcompteur est un entier pour nbcompteur=1 a tableoccurence(nom_de_la_table) si table.nom_du_champ_a_recherche[ncompteur]=nom_du_champ(ou est le numero a rechercher alors tableselectplus(table..valeur) retour sinon table..valeur++ fin |
| |
| |
| | | |
|
| | |
| |
Posté le 26 janvier 2006 - 16:14 |
j'aavais oublier: avant deparcourir ta boucle il faut positionner le bandeau sur la 1er ligne de table avec: tableselectplus(table,1) comme ca a chaque recherche plus besoin de raccourci touche des que la recherche a trouve le champ a afficher le bandeau se positionne directement dessus. voila |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|