Recherche dans une listbox

Résolu
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 30 août 2007 - 23 mai 2006 à 18:44
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre 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

8 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
23 mai 2006 à 21:51
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 +
3
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 30 août 2007
23 mai 2006 à 22:11
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
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
24 mai 2006 à 09:32
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 +
3
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 30 août 2007
23 mai 2006 à 18:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
23 mai 2006 à 19:09
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é
0
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 30 août 2007
23 mai 2006 à 19:13
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
0
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
23 mai 2006 à 19:21
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...
0
cs_TouTSpeed Messages postés 72 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 30 août 2007
24 mai 2006 à 13:41
Mon code me suffis mais je te remercie de l'info

je vais quand même le rajouter à mon application

merci beaucoup
0
Rejoignez-nous