Recherche dans une listbox [Résolu]

Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
- - Dernière réponse : cs_TouTSpeed
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
- 24 mai 2006 à 13:41
bonjour à tous

j'utilise ce code sous delphi 6 édition personnel pour rechercher un texte dans une listbox

var
index2 : integer;
begin
index2 := SendMessage(ListBox2.Handle, LB_FINDSTRING, -1, LongInt(PChar(Edit2.Text)));


if index2 > -1 then
ListBox2.ItemIndex := index2;
end;

j'aimerai que la rechercher ne s'effectue pas seulement sur un terme exact

si je tape   "sal"  je veux que mon code me trouve "salut"

et j'ai aussi une autre question sur ce code est il possible de rechercher l'occurence suivante du meme nom par un clique sur un bouton

merci à tous

ce site est super
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
3
Merci
Salut ToutSpeed,

Voici une méthode toute simple qui se passe d'envoi de messages : un Edit pour le texte à chercher, 1 bouton 'Rechercher' et 1 bouton 'Suivant'.

var
   ReSearchLine: integer;

....

procedure TForm1.SearchInListBox;
var
  SubStr: string;
  I, P: integer;
begin
  Substr:= AnsiUpperCase(Edit1.Text); // mise en majuscules pour pas de distinction min-maj
  P:= 0;
  for I:= ResearchLine to ListBox1.Items.Count - 1 do
  begin
     P:= Pos(SubStr, AnsiUpperCase(ListBox1.Items[I]));
     if P > 0 then Break;  // trouvé donc sortie de la boucle
  end;
  if P > 0 then
    ListBox1.Selected[I]:= true
  else
    ShowMessage('Chaîne recherchée "' + Edit1.Text + '" non trouvée.');
  ResearchLine:= I; // on mémorise la ligne
end;



procedure TForm1.BoutonChercherClick(Sender: TObject);

begin
  ResearchLine: = 0; // on part depuis la première ligne
  SearchInListBox;
end;



procedure TForm1.BoutonSuivantClick(Sender: TObject);

begin
  Inc(ResearchLine); // on part de la ligne suivante
  SearchInListBox;
end;
----
Il y a moyen de compliquer : recherche de l'occurence suivante sur la même ligne du ListBox. Mais dans ce cas, il faudrait coloriser le mot trouvé dans la ligne, et donc avoir un listbox dessiné par le propriétaire en employant l'événement OnDrawItem. On pourrait même en une seule fois coloriser le mot trouvé dans toutes les lignes.
A toi de voir si tu as besoin de cela....

A +

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de ThWilliam
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
3
Merci
merci à toi Thwilliam et de mon côté je me suis cassé la tête et j'ai donc trouver de moi même

je suis content

pour se faire voici le code

var
  Form1: TForm1;
  index : integer;

---------------------------champ de recherche---------------------------
procedure TForm1.Edit1Change(Sender: TObject);
begin
index := SendMessage(ListBox1.Handle, LB_FINDSTRING, -1, LongInt(PChar(Edit1.Text)));


if index > -1 then
ListBox1.ItemIndex := index;  //   pour sélectionner dans d'autres
ListBox2.ItemIndex := index;  //  listbox sur la meme ligne
ListBox3.ItemIndex := index;
end;

---------------bouton suivant--------------------------------------
procedure TForm1.Button5Click(Sender: TObject);
var index2 : integer;
begin


index2 := SendMessage(ListBox1.Handle, LB_FINDSTRING, index, LongInt(PChar(Edit1.Text)));


if index > -1 then
ListBox1.ItemIndex := index2;
ListBox2.ItemIndex := index2;
ListBox3.ItemIndex := index2;


index := index2;  // je réinitialise avec la seconde donnée et ainsi                   //de suite


end;

si vous ne comprenez pas mon code aqui est peut être compliqué, bourrin lol dite le moi 

pour moi il est très simple car je le comprend mais mon prof d'informatique industrielle me dit toujours tu cherche compliqué alors
dite moi tout

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_TouTSpeed
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
3
Merci
Salut ToutSpeed,

Non ton code n'est pas compliqué et ça marche, sauf qu'il ne trouve un mot qu'en début de ligne, comme je te l'ai déjà dit, mais cela est peut-être suffisant pour ce que tu veux faire.

Tu peux simplifier ton code pour Button5, en fait la variable index2 n'est pas nécessaire.

procedure TForm1.Button5Click(Sender: TObject);
begin
    index := SendMessage(ListBox1.Handle, LB_FINDSTRING, index, LongInt(PChar(Edit1.Text)));
   if index > -1 then
  begin
        ListBox1.ItemIndex := index;
        ListBox2.ItemIndex := index;
        ListBox3.ItemIndex := index;
   end;
end;

A +

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de ThWilliam
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
0
Merci
houla c'est la fin de la journée lol mon code fait déja ce qu ej eveux il me faudrait just ele bouton suivant!!!

merci d eme dire comment éditer mon message
Commenter la réponse de cs_TouTSpeed
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
0
Merci
Salut ToutSpeed,

Si ton code fait ce que tu veux, tant mieux.
Cependant, je te signale qu'il ne trouve un mot que en début de ligne.

ex : ta ligne = salut à toi
recherche 'sal' : ok
recherche 'salut' : ok
recherche 'toi' : pas trouvé
Commenter la réponse de ThWilliam
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
0
Merci
ThWilliam  merci à toi

si tu sais comment faire peut tu me le communiquer
cela serait sympa pour moi ainsi qu epour les autres personnes

 j'ai aussi une autre question sur ce code est il possible de rechercher l'occurence suivante du meme nom par un clique sur un bouton
Commenter la réponse de cs_TouTSpeed
Messages postés
1201
Date d'inscription
mercredi 2 novembre 2005
Dernière intervention
10 septembre 2011
0
Merci
Salut,

est-ce que tu peux éviter d'écrire en SMS stp ce qui est assez désagréable à la lecture et je ne suis pas sur que tout le monde ici comprenne. Le language SMS est réservé "aux jeunes" (je suis plus jeune que toi eh oui).

Merci de ta compréhension...

@+
 Matt
La paresse est la mère du génie...
Commenter la réponse de Matt 261
Messages postés
72
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
30 août 2007
0
Merci
Mon code me suffis mais je te remercie de l'info

je vais quand même le rajouter à mon application

merci beaucoup
Commenter la réponse de cs_TouTSpeed

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.