cs_TouTSpeed
Messages postés72Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention30 août 2007
-
23 mai 2006 à 18:44
cs_TouTSpeed
Messages postés72Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention30 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
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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;
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....
cs_TouTSpeed
Messages postés72Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention30 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
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 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;
Matt 261
Messages postés1173Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention10 septembre 20113 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).