|
|
|||||
| u |
Une recherche longue et pénible Dès que vos programmes manipulent des données les contrôles ListBox et ComboBox sont mis à contribution. Ces contrôles sont très pratiques pour lister des données, mais rien n'existe pour retrouver une ligne directement, le seul moyen étant de parcourir la liste à la recherche de la ligne. Cette méthode est parfois longue, très longue, surtout quand les listes contiennent plusieurs centaines d'éléments. Heureusement il y a les APIs et les messages ! En ce qui concerne les ListBox et les ComboBox, il existe un moyen de retrouver un élément directement. Ces petits coquins de chez Microsoft n'ont pas jugé utile d'inclure aux contrôles ListBox et ComboBox les fonctions de recherche directes alors qu'elles existe depuis eVC++ ! Pour effectuer une recherche dans une ListBox ou dans un ComboBox, il faut envoyer un message ordonnant au contrôle visé d'effectuer la recherche. La réponse est l'index de l'item trouvé, ou -1 si pas trouvé (comme par hasard !). L'API qui permet d'envoyer un message à ces contrôle est "SendMessageString" qui se trouve (et oui encore) dans la librairie dynamique "Coredll" et qui se déclare en eVB de la manière suivante : Public Declare Function SendMessageString Lib "Coredll" Alias "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long Il faut aussi déclarer des constantes qui seront utilisées dans le cadre de la recherche avec une ListBox : Const LB_FINDSTRING
= &h18F et des constantes qui seront utilisées dans le cadre de la recherche avec un ComboBox : Const CB_FINDSTRING
= &h14C Si vous voulez trouver le premier item de Combo1 qui commence par "St", il suffit d'écrire : Dim wIndex As Long wIndex sera égal à l'index du premier item qui commence par "st" (les majuscules et les minuscules ne sont traitées). Le paramètre n°3 (ici égal à zéro) indique à partir de quel item la recherche commence. Ceci vous permet de lancer la recherche de tous les items qui commencent par "st" de la manière suivante : Dim r As String Ce code est légèrement compliqué mais il est important de savoir quand s'arrêter de chercher car la recherche se fait à partir de l'index stipulé jusqu'à la fin de la liste, puis depuis le début de la liste jusqu'à l'index ! Pour effectuer une recherche sur l'item complet, et pas seulement sur le début de l'item il faut utiliser la constante CB_FINDSTRINGEXACT au lieu de CB_FINDSTRING Pour effectuer aussi des recherches dans une ListBox, il suffit de remplacer les constantes CB_ par LB_, le fonctionnement est exactement le même. Voilà, vous pouvez maintenant vous lancer dans des recherches sur des listes (ComboBox et ListBox) avec eVB sans rougir des temps de réponse !
|
||||
|
|
|||||
|
Copyright 2001-2004 - Tous droits réservés
|
|||||
|
iPAQ
est un produit de COMPAQ.
|