Salut tout le monde
J'ai un problème, je n'ai pas réussi à créer un compte à rebours. Je n'ai pas compris la logique du Timer. Si quelqu'un pouvait m'aider.
merci
Version imprimable
Salut tout le monde
J'ai un problème, je n'ai pas réussi à créer un compte à rebours. Je n'ai pas compris la logique du Timer. Si quelqu'un pouvait m'aider.
merci
un Timer exécute une action à intervalle spécifié
si tu veux faire un compte à rebours, mets '30' dans Label1.Caption
lance un timer avec 1000 comme intervalle (1000 ms = 1 seconde)
dans l'événement OnTimer du Timer, il faudra qu'il lise Label1.Caption, le traduise en entier, et le décrémente ; style :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 procedure Timer1.Timer(Sender: TObject); var i: integer; begin i:=StrToIntDef(Label1.Caption, -1); if i>0 then begin Dec(i); Label1.Caption:=IntToStr(i); end else Timer.Enabled:=False; end;
Il est possible, si vraiment le Timer t'est incompréhensible, d'utiliser sleep(t).
Sleep(1000) fera passer une seconde, et si je ne m'abuse ça équivaut à lancer un TTimer avec un intervalle de 1000.
Du genre
En espérant avoir pu fournir une autre solution ;)Code:
1
2
3
4
5
6
7 While counter>0 do begin Dec(counter); sleep(1000); end;
Non, non, Sleep() est à proscrire au maximum, il ne doit jamais être utilisé car il interrompt le programme et les systèmes d'exploitation n'aiment pas les programmes qui ne répondent pas.
De plus, si on fait une boucle qui prend du temps dans une application VCL ou FMX il faut quand même traiter les modifications à l'écran donc ajouter un Application.ProcessMessages, mais je le répète, le mieux est de ne pas faire de boucle de ce style et encore moins pour un Sleep();