Hello,
Je voudrais executer une série de choses jusqu'a ce que l'user presse un boutton, je crois que je dois utiliser while mais je ne sais pas trop comment quelqu'un peut il m'aider ?
Version imprimable
Hello,
Je voudrais executer une série de choses jusqu'a ce que l'user presse un boutton, je crois que je dois utiliser while mais je ne sais pas trop comment quelqu'un peut il m'aider ?
salut,
tu peux utiliser une boucle while ... do pour ton traitement, dans cette boucle tu testes la valeur d'une variable de niveau feuille, laquelle variable sera assignée à une valeur X lorsque tu cliqueras sur ton bouton.
exemple:
Button1 lance un traitement qui est arrêté par Button2Code:
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 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; Arret: Boolean;//variable test implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //initialise la variable arret Arret := False; //boucle tant que la variable Arret n'est pas vraie while not Arret do begin //traitement ici ... Application.ProcessMessages(); //traite les messages dans la file d'attente end; //notification de fin ShowMessage('Fin de procédure !'); end; procedure TForm1.Button2Click(Sender: TObject); begin //arrete la procédure lancée Arret := True; end; end.
:lol:
Ca peut fonctionner... Mais il serait ô combien plus judicieux d'utiliser un thread ;)
Code:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTache = class(TThread) protected procedure Execute; override; public constructor Create(AOnTerminate : TNotifyEvent); end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure TacheTerminated(Sender: TObject); private { Déclarations privées } Tache : TTache; public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} constructor TTache.Create(AOnTerminate : TNotifyEvent); begin inherited Create(True); OnTerminate := AOnTerminate; FreeOnTerminate := True; Resume; end; procedure TTache.Execute; begin while not Terminated do begin // Ton traitement end; end; procedure TForm1.FormCreate(Sender: TObject); begin Tache := nil; end; procedure TForm1.FormDestroy(Sender: TObject); begin if Assigned(Tache) then begin Tache.Terminate; while Assigned(Tache) do Sleep(10); // Pour attendre que le thread se termine end; end; procedure TForm1.Button1Click(Sender: TObject); begin if not Assigned(Tache) then Tache := TTache.Create(TacheTerminated); end; procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(Tache) then Tache.Terminate; end; procedure TForm1.TacheTerminated(Sender: TObject); begin ShowMessage('Fin de procédure !'); Tache := nil; end; end.
entièrement d'accord avec toi 8)Citation:
Envoyé par sjrd