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
3808
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
20 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

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

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

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;