Instruction qui ne semble pas s'executer

John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 12 oct. 2008 à 22:29
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 15 oct. 2008 à 19:55
Salut à tous.

J'ai sur une form un listview dans lequel je souhaite faire une recherche, pour donner la possibilité à l'utilisateur de continuer la recherche si une réponse à été trouvé, voilà ce que j'ai écris :

procedure TForm1.Chercherunfichier1Click(Sender: TObject);
var
  FichierAChercher:string;
  IndexListe:integer;
begin
  if ListVw_DetailsFichiers.Items.Count=0 then
    exit;
  FichierAChercher:=InputBox('Chercher un fichier','Entrez le nom du fichier à chercher','');
  for IndexListe:=0 to (ListVw_DetailsFichiers.Items.Count-1) do
  begin
    if AnsiContainsText(ListVw_DetailsFichiers.Items[IndexListe].Caption,FichierAChercher) then
    begin
       ListVw_DetailsFichiers.Selected:=ListVw_DetailsFichiers.Items[IndexListe];
       ListVw_DetailsFichiers.Selected.MakeVisible(False);
       if MessageDlg('Un fichier à été trouvé, voulez-vous poursuivre la recherche ?',mtConfirmation,[mbYes,MbNo],0)=mrNo then
         break;
    end;
  end;
end;

Théoriquement, quand on a trouvé un élément correspondant dans la liste, on le selectionne, on le rend visible et on affiche une boite de dialogue pour demander si on veut continuer la recherche.
Le soucis c'est qu'apparement les deux lignes qui selectionnent l'element dans le listview et le rendent visible ne semblent pas s'executer (juste avant l'appel à MessageDlg dans mon code)

Pourtant si je retire cet appel à MessageDlg et que je passe directement à "break", tout fonctionne normalement ...
Dans ce cas, l'utilisateur perds la possibilité de chercher plusieurs occurences du mots, ce qui est l'inverse de ce que je voudrais faire

Quelqu'un aurait un idée ?

2 réponses

beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
15 oct. 2008 à 19:30
Chez moi, cela fonctionne !

uses
  StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  FichierAChercher:string;
  IndexListe:integer;
begin
  if ListView1.Items.Count=0 then
    exit;
  FichierAChercher:=InputBox('Chercher un fichier','Entrez le nom du fichier à chercher','');
  for IndexListe:=0 to (ListView1.Items.Count-1) do
  begin
    if AnsiContainsText(ListView1.Items[IndexListe].Caption,FichierAChercher) then
    begin
       ListView1.Selected:=ListView1.Items[IndexListe];
       ListView1.Selected.MakeVisible(False);
       if MessageDlg('Un fichier à été trouvé, voulez-vous poursuivre la recherche ?',mtConfirmation,[mbYes,MbNo],0)=mrNo then
         break;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
  it: TListItem;
begin
  FItems := TListItems.Create(ListView1);
  for i := 0 to 9 do
  begin
    it := TListItem.Create(FItems);
    ListView1.Items.AddItem(it, i);
    ListView1.Items[i].Caption := IntToStr(i);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FItems.Free;

end;
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
15 oct. 2008 à 19:55
Ben que dire
Chez moi, ça veut pas ...

En fait la recherche se fait, l'ecran remonte (le listview) pour rendre visible l'element choisi, mais l'encadré en gris sur cet élément ne s'affiche pas ...
0
Rejoignez-nous