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;