Stopper procédure / incrémentation

Résolu
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 - 25 mai 2010 à 12:21
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 - 25 mai 2010 à 19:20
Bonjour !
J'ai réaliser une procédure qui me permet de parcourir les fichiers d'un dossier et de ses sous-dossiers mais je me retrouve face à 2 problèmes :
- comment stopper cette procédure en cours (sans perdre les données collectées) ?
- pourquoi ResultTotal s'incrémente n'importe comment ?

Si une bonne âme pouvait m'aider à les résoudre svp.
Merci !

> Pour la première j'ai trouvé un truc du coté des boucle (Stop : boolean = false;) mais ça ne marche pas :/

function ListFiles(Chemin:String):Integer;
var
S : TSearchRec;
ResultTotal : integer;
begin
  Chemin:=IncludeTrailingPathDelimiter(Chemin);
  Form1.Label2.Caption:=Chemin;
  Form1.Label2.Refresh;
  Form1.CheckListBox1.Refresh;

  Result:=0;
  ResultTotal:=0;
  If FindFirst(Chemin+'*.*',faAnyFile,S)=0
  then begin
    repeat
      if (S.Name<>'.')And(s.Name<>'..')
      then begin
        if (S.Attr And faDirectory)<>0
          then begin Result:=Result+ListFiles(Chemin+S.FindData.cFileName); Inc(ResultTotal); end
          else
           if MatchesMask(S.Name, 'Rt*.*') then
            begin
              Form1.CheckListBox1.Items.Add(S.Name);
              Inc(Result);
            end;
   end;
   until FindNext(S) <> 0;
   FindClose(S);
   Form1.Label2.Caption:=IntToStr(Result)+' élément(s) trouvé(s) :';
   Form1.Label3.Caption:=IntToStr(ResultTotal)+' fichier(s) scanné(s)';
   end;
end;

Result est incrémenté pour compter les fichiers relevés.
ResultTotal est incrémenté pour compter les fichiers "scannés".
Les fichiers sont listés dans CheckListBox1.

5 réponses

dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
25 mai 2010 à 15:28
Salut
"pourquoi ResultTotal s'incrémente n'importe comment ? "
si tu lis ResultTotal en dehors de la function, c'est normal que ce soit n'importe quoi puisque ResultTotal est dévlaré local à la fonction


Dubois77
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
25 mai 2010 à 17:24
Salut,

pour interrompre la boucle Repeat/until c'est "Break"
si c'est pour interrompre la procedure c'est "Exit" mais attention à la placer et a l'utiliser correctement (voir l'aide)


[hr]@+Cirec
[hr]
3
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
25 mai 2010 à 19:20
j'ai trouvé :

function ListFiles(Chemin:String):Integer;
var
S : TSearchRec;

begin [...]
  If FindFirst(Chemin+'*.*',faAnyFile,S)=0
  then begin
    repeat
      Application.ProcessMessages;
      if (StopProcess) then exit else
      if (S.Name<>'.')And(s.Name<>'..')
      then begin
[...]
procedure TForm1.FormClick(Sender: TObject);
begin
StopProcess := true;
end;
3
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
25 mai 2010 à 16:34
J'ai sorti la déclaration de la fonction et ça marche. Merci !!
(j'ai mi ResultTotal:=0; autre part aussi).


Quelqu'un sait comment stopper la procédure de la fonction ?
0

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

Posez votre question
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
25 mai 2010 à 18:00
Merci mais le problème que je rencontre est que le prog "freeze" j'aimerai que dans la boucle il puisse prendre en considération le clic par exemple.

function ListFiles(Chemin:String):Integer;
[...]
if MatchesMask(S.Name, '._*.*') then
begin
  Form1.CheckListBox1.Items.Add(S.Name);
  Inc(Result);
  Application.ProcessMessages;
  if StopProcess=1 then exit else
end;
Until FindNext(S) <> 0;
[...]

procedure TForm1.FormClick(Sender: TObject);
begin
StopProcess := 1;
end;
0
Rejoignez-nous