Gauge qui avance en fonction d'un Timer
Bonjour
J'aimerai faire une feuille qui force l'utilisateur à attendre une durée définie par lui, en montrant la progression de l'attente.
La variable Attendu correspond au temps déjà écoulé en minutes depuis le début du traitement (avant que la feuille d'attente passe en ShowModal).
La variable IntervalleUser correspond au temps d'attente en minutes entré par l'utilisateur (au tout début).
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
| var
FormAttente: TFormAttente;
Tmp : real ;
TpsEcoule : real ;
procedure TFormAttente.FormActivate(Sender: TObject);
begin
G_TpsRestant.Progress := trunc(Unit1.Attendu*100/Unit1.IntervalleUser) ;
TpsRestant.Caption := FloatToStr(Unit1.IntervalleEnvoi-Unit1.Attendu) ;
Tmp := 0 ;
Timer_DelaiEntr.Interval := 5000 ;
Timer_DelaiEntr.Enabled := true ;
end;
procedure TFormAttente.FormDeactivate(Sender: TObject);
begin
Timer_DelaiEntr.Enabled := false ;
end;
procedure TFormAttente.Timer_DelaiEntrTimer(Sender: TObject);
begin
if G_TpsRestant.PercentDone < 100 then
begin
//Compteur du temps écoulé en % de la duree totale en min
G_TpsRestant.AddProgress(trunc((Timer_DelaiEntr.Interval/60000)*100/Unit1.IntervalleUser)) ;
if tmp >=30 then
begin
//Temps restant en min
TpsRestant.Caption := FloatToStr(StrToFloat(TpsRestant.Caption)-0.5) ;
tmp := 0 ;
end
else
begin
//Compteur du temps écoulé en s
tmp := tmp+(Timer_DelaiEntr.Interval/1000) ;
end ;
if G_TpsRestant.PercentDone = 100 then FormAttente.close ;
end
else
begin
FormAttente.close ;
end ;
end;
procedure TFormAttente.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
FormAttente.ModalResult := mrOK ;
end; |
C'est ce qui est en rouge qui pose problème.
Cela donne une valeur en minute. Du coup tres proche de 0. AddProgress n'accepte que des entiers. Donc il faut arrondir... Mais là trunc renvoie 0...
Du coup la barre n'avance pas.
Est-ce que quelqu'un aurait une idée?? Merci d'avance!