Stopper procédure / incrémentation [Résolu]

Signaler
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
-
cs_JackNUMBER
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
-
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

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
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
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
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]
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
1
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;
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
1
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 ?
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
1
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;