J'ai essayé d'insérer une animation pour faire patienter le temps d'un calcul.
L'animation, à la fréquence gérée par un composant Ttimer se déclenche bien si j'utilise par exemple un Tbutton "Flash" et s'arrête avec un "stop".
Mais rien ne se passe si je la déclenche en début de boucle et l'arrête en fin de boucle.
Dans l'exemple je calcule une valeur de pi/4 par la série de Leibnitz : avec 100000000 de termes, ma bécane met 18 secondes (elle est vieille, soyez indulgents), donc une animation pour patienter serait la bienvenue...
Tous les conseils seront examinés attentivement, merci d'avance
Voici le code :
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 procedure TForm1.Timer1Timer(Sender: TObject); begin inc(start); //chaque Timer1.interval (ici 1/2 seconde) n:=(start mod 2); //donne la parité de start case n of //alterne les couleurs selon pair ou impair 0: Shape1.Brush.Color:=clblue; 1: Shape1.Brush.Color:=clfuchsia; end; end; procedure TForm1.chrono(t: word); var h,m,s,ms,st : word; begin decodetime(time,h,m,s,ms); case t of 0: t0:=h*3600+m*60+s; //heure début du calcul 1: begin t1:=h*3600+m*60+s; //heure de fin du calcul st:=t1-t0; temps.caption:='Durée '+inttostr(st)+' s'; end; end end; procedure TForm1.leibnitz; //calcul de Pi/4 par le Développement Limité de ArcTan(1) var i,t:longword; k:integer; w:real; begin t:=1000000000; //nombre de termes de la somme chrono(0); //top chrono // start:=0;timer1.enabled:=true; w:=1; k:=-1; for i:=1 to t do begin w:=w+k/(2*i+1); k:=-k ; end; labelLeibnitz.caption:='Leibnitz donne Pi/4= '+floattostr(w); chrono(1); //Stop chrono labelnbdetermes.caption:='avec '+inttostr(t)+' termes'; // timer1.enabled:=false; end; procedure TForm1.Button1Click(Sender: TObject); //flash begin start := 0; Timer1.Enabled := True; end; procedure TForm1.Button3Click(Sender: TObject); //stop flash begin Timer1.Enabled := False; end;
Partager