Figer l'heure afin de l'utiliser comme parametre de calcul

Résolu
mezaouri Messages postés 4 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 23 mars 2006 - 20 mars 2006 à 13:52
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 21 mars 2006 à 23:19
bonjour,
je voudrais utiliser l'heure du system comme parametre de calcul afin de calculer un volume en temps reel connaissant l'heure du debut et le debit de remplissage d'une citerne par ex.
en utilisant
maskEdit1.Text:= TimeToStr(now); // heure actuelle
comment figer heure actuelle pour effectuer la difference de temps (debut replissage-heure actuelle) a n' importe quel moment???
Merci

5 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 mars 2006 à 18:47
tu peu meme avoir le temps en millisecondes, ce qui est plus precis :

var TMS : Cardinal;
TEL,Sigma : Single;
begin
TMS := GetTickCount;

... methode ... Sigma := ???

TMS := GetTickCount - TMS;
TEL := (Sigma/TMS)*1000; {N/Sec}

label1.caption := format('Rate : %.2f U/Sec (%.2f/%d sec)',[TEL,Sigma,TMS div 1000]);
end;

et pour transformer ces MilliSecondes en Temps (TDateTime) :

function MsToTime(const Ms : cardinal) : TDateTime;
begin
Result := EncodeTime( Ms div 3600000, (Ms div 60000) mod 60,
(Ms div 1000) mod 60, Ms mod 1000);

end;

<hr size="2" width="100%">
3
mezaouri Messages postés 4 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 23 mars 2006
21 mars 2006 à 15:07
merci d'y avoir repondu j'apprecie ce geste, je trouve la reponse de foxi est tres complete sauf que je suis novice et je ne veux precipiter les choses et m'enfoncer encore plus j'ai utilise la methode la plus elementaire que voici,

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=true;
maskedit2.Text:=timetostr(now);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin


timer1.Enabled :=false; // afin de stoper l'horloge
label1.Caption:=floattostr(strtotime(maskedit2.text)-strtotime(maskedit1.text));
et ça marche!eureka!!Sauf qu'a l'oppose de fOxi je dois convertir le format time H:M:S en decimales (minutes) et la je suis plante.
merci encore.
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
21 mars 2006 à 23:19
je suis d'accord, les convertions sont assé complexe a comprendre mais si simple a la fois.

GetTickCount renvois des millisecondes.

pour transformer ces millisecondes en temps HMSZ il faut connaitre ce principe tout simple :

Seconde = MS / 1000 (1000 ms/sec)
Minutes = MS / 1000 / 60 (1000ms/sec et 60 sec/min)
Heures = Ms / 1000 / 60 / 60 (1000ms/sec et 60sec/min et 60min/heure)

c'est simple non ?

en tout cas c'est ce qu'il y a de plus precis.

maintenant les types :

GetTickCount renvois un entier non signé 32 bits (cardinal / LongWord)
Time, Now renvois un Double (TDateTime) un flottant donc.

pour obtenir H,M,S et Z par rapport a un Time ou Now il suffit d'utiliser DecodeTime de l'unité sysutils et inversement obtenir un TDateTime par rapport a HMSZ on utiliseras EncodeTime de la meme unité.

<hr size="2" width="100%">
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 mars 2006 à 14:26
salut,,

memorise ton heure de début:

debut,DeltaT::TDateTime;

debut:=now;

pour la difference:

DeltaT:=now-debut;



@+

jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
21 mars 2006 à 15:51
passer par les convertion en chaine n'est très judicieux il vaut miux utilser directemnt les routines de gestion de datetime

var debut:Tdatetime;

procedure TForm1.departClick(Sender: TObject);

begin

timer1.Enabled:= true; //on demarre le chrono

debut: =now;// on memorise le début

label2.Caption:= timetostr(0); //on met le chrono à 0



end;



procedure TForm1.Arret2Click(Sender: TObject);

var DeltaT:Tdatetime;

begin

deltaT: = now-debut;// on calcule le temps ecoule

label1.Caption:= timetostr(DeltaT);

timer1.Enabled:=false; //on arrete le chrono



end;



procedure TForm1.Timer1Timer(Sender: TObject);

var DeltaT:Tdatetime;

begin

deltaT: = now-debut;//on calcule le temps ecoulé

label2.Caption:=timetostr(DeltaT);//on affiche le chrono





end;



@+

jlen
0
Rejoignez-nous