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

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

Votre réponse

5 réponses

Meilleure réponse
Messages postés
692
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
14 septembre 2018
- 25 mai 2010 à 15:28
3
Merci
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

Merci dubois77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de dubois77
Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 25 mai 2010 à 17:24
3
Merci
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Dernière intervention
26 juin 2011
- 25 mai 2010 à 19:20
3
Merci
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;

Merci cs_JackNUMBER 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_JackNUMBER
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Dernière intervention
26 juin 2011
- 25 mai 2010 à 16:34
0
Merci
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
Messages postés
236
Date d'inscription
jeudi 30 septembre 2004
Dernière intervention
26 juin 2011
- 25 mai 2010 à 18:00
0
Merci
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.