Recherche dans une listbox [Résolu]

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

ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 23 mai 2006 à 21:51
+3
Utile
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 +
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
cs_TouTSpeed 72 Messages postés jeudi 5 janvier 2006Date d'inscription 30 août 2007 Dernière intervention - 23 mai 2006 à 22:11
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_TouTSpeed
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 24 mai 2006 à 09:32
+3
Utile
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 +
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
cs_TouTSpeed 72 Messages postés jeudi 5 janvier 2006Date d'inscription 30 août 2007 Dernière intervention - 23 mai 2006 à 18:51
0
Utile
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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 23 mai 2006 à 19:09
0
Utile
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
cs_TouTSpeed 72 Messages postés jeudi 5 janvier 2006Date d'inscription 30 août 2007 Dernière intervention - 23 mai 2006 à 19:13
0
Utile
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
Matt 261 1201 Messages postés mercredi 2 novembre 2005Date d'inscription 10 septembre 2011 Dernière intervention - 23 mai 2006 à 19:21
0
Utile
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
cs_TouTSpeed 72 Messages postés jeudi 5 janvier 2006Date d'inscription 30 août 2007 Dernière intervention - 24 mai 2006 à 13:41
0
Utile
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.