on a une procédure qui contient une boucle, on veut voir la progression de l'exécution de cette boucle alors comment faire?
on a une procédure qui contient une boucle, on veut voir la progression de l'exécution de cette boucle alors comment faire?
Salut,
Tu souhaite faire quoi au juste? Parceque là ça manque un peu de précisions.
1) Si tu souhaite visualiser l'avancement de ton traitement, utilise une TProgressBar.
2) Si c'est juste pour débugger, tu peux le faire pas à pas ou mettre desau milieu de ta boucle pour voir ou tu en es.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShowMessage(inttostr(TaVariableDeBoucle));
3) C'est ni l'un ni l'autre et on en revient au manque de précision...
A+.
Bonjour, si tu veux voir l'avancement d'un boucle dans un label, tu peux faire ceci:
Ce code, n'est qu'un exemple, je ne sais pas si cela correspond à ton besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure ChargeFichier; var NbFichier : integer; begin NbFichier := 50000; For i:=1 to NbFichier do begin Label1.Caption := 'Copie du fichier ' + IntToStr(i) + ' sur ' + IntToStr(NbFichier); Application.ProcessMessage; end; end;
Pour du Debug
tu peux aussi utiliser OutputDebugString et voir les messages dans le journal d'évènement de Delphi
Pour du Client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ProgressBar.Position := 0; ProgressBar.Max := Count; ProgressBar.Step := 1; for i := 0 to Count - 1 do begin ... ProgressBar.StepIt(); ... end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
"voir la progression de l'exécution d'une boucle" :
- avec ShowMessage() : c'est la galère : faut appuyer sur OK for i:=1 to N !!! ... et noter les messages sur un papier pour s'en souvenir !
- avec Label1.Caption : si le tour de boucle est rapide le message est illisible et s'il est lisible on n'a pas le temps de le noter qu'il change déjà,
- avec ProgressBar : c'est tout juste bon pour faire patienter l'utilisateur en le rassurant que ça avance, lentement, mais ça avance,
- voir les messages dans le journal d'évènements de Delphi : connais pas, je viens de découvrir.
Pour ma part j'utilise en phase de mise au point un RichEdit et je truffe ma boucle avec des richedit1.lines.add(info) où info est la chaîne de ce qui m'intéresse à chaque étape ... et en fin de boucle on peut voir ou récupérer le texte du RichEdit et même l'imprimer avec RichEdit.print ... (raison pour laquelle je n'utilise que rarement un tMemo où Memo.print n'existe pas).
Si la présence permanente en avant plan du RichEdit est gênante rien n'empêche de le rendre invisible/visible, selon les besoins, via un click-bouton ou autre. En bref ça donne un "journal d'évènements" personnalisé.
Reste à bien doser le nombre de richedit1.lines.add(info) car on est vite envahi par trop d'infos.
Idem :pour moi.Envoyé par Gilbert Geyer
J'utilise donc un TRichEdit
j'ai un bouton
- Stop ==> on Sort de la boucle
- Pause ==> on active une pause dans la boucle
- ViderRichEdit ==> Vidage du RichEdit
Expl
Avec ce genre de truc on a une bonne vision de ce qui se trafic
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 Procedure TForm.Bt_RichEdit_ViderClick(Sender:TObject); Begin Bt_RichEdit_Vider.Tag := 1 End; Procedure TForm.Bt_StopClick(Sender:TObject); Begin Bt_Stop.Tag := 1; End; Procedure TForm.Bt_PauseClick(Sender:TObject); Begin If Bt_Pause.Tag = 1 Then Bt_Pause.Tag := 0 Else Bt_Pause.Tag := 1; End; Procedure TForm.MaProcedure; Var NbBcl:Integer; NbBclCh:String; Begin NbBcl := 0; RichEdit.CLear; Bt_Stop.Tag = 0; Bt_RichEdit_Vider.Tag := 0; While FaireMonTruc Do Begin Inc(NbrBcl); NbBclCh := IntToStr(NbBcl); Application.ProcessMessages; if Bt_RichEdit_Vider.Tag = 1 Then Begin//Vider le RichEdit RichEdit.CLear; Bt_RichEdit_Vider.Tag := 0; End; RichEdit.Lines.Add('Deb Boucle N°:'+NbBclCh); RichEdit.Lines.Add(#9+NbBclCh+'-- Deb Proc TOTO');//Tabulation=#9 Toto;//Procedure TOTO RichEdit.Lines.Add(#9+NbBclCh+'-- Fin Proc TOTO'); .....//Traitement RichEdit.Lines.Add('FIN Boucle N°:'+NbBclCh); Application.ProcessMessages; if Bt_Stop.Tag = 1 Then Begin//Arret demandé RichEdit.Lines.Add('***** STOP DEMANDÉ PAR UTILISATEUR *****'); Break; End; If Bt_Pause.Tag = 1 Then Begin//Pause demandée RichEdit.Lines.Add(' --- PAUSE DEMANDÉE PAR UTILISATEUR'); While Bt_Pause.Tag = 1 Do Application.ProcessMessages; //Faudra re clicker sur le bouttoon Pause, pour continuer RichEdit.Lines.Add(' --- PAUSE TERMINÉE'); End; End;//End du While FaireMonTruc Do End;//Procedure TForm.MaProcedure;
Partager