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

cs_JackNUMBER 236 Messages postés jeudi 30 septembre 2004Date d'inscription 26 juin 2011 Dernière intervention - 25 mai 2010 à 12:21 - Dernière réponse : cs_JackNUMBER 236 Messages postés jeudi 30 septembre 2004Date d'inscription 26 juin 2011 Dernière intervention
- 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.
Afficher la suite 

5 réponses

Répondre au sujet
dubois77 689 Messages postés jeudi 17 avril 2008Date d'inscription 9 mars 2018 Dernière intervention - 25 mai 2010 à 15:28
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dubois77
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 25 mai 2010 à 17:24
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
cs_JackNUMBER 236 Messages postés jeudi 30 septembre 2004Date d'inscription 26 juin 2011 Dernière intervention - 25 mai 2010 à 19:20
+3
Utile
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;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_JackNUMBER
cs_JackNUMBER 236 Messages postés jeudi 30 septembre 2004Date d'inscription 26 juin 2011 Dernière intervention - 25 mai 2010 à 16:34
0
Utile
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 ?
Commenter la réponse de cs_JackNUMBER
cs_JackNUMBER 236 Messages postés jeudi 30 septembre 2004Date d'inscription 26 juin 2011 Dernière intervention - 25 mai 2010 à 18:00
0
Utile
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;
Commenter la réponse de cs_JackNUMBER

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.