09. august 2008 - 19:39
Der er
17 kommentarer og 1 løsning
Visse uptime af applikationen
Hej alle Jeg ønsker at vise oppetiden på min applikation. Jeg benytter følgende kode: var ProgramStart: TDateTime; procedure TForm1.Timer1Timer(Sender: TObject); begin Label2.Caption := 'Oppetid: ' + inttostr(trunc(now-ProgramStart)) + FormatDateTime('h:nn:ss', Frac(now-ProgramStart)); end; Men hvis jeg ændrer datoen på min computer (til e.g. den 10 august, samme tid som nu), så lægger den kun 10 timer til, og ikke 24? Er der en fejl i min kode?
Annonceindlæg fra Trustworks
Tillid i en Zero-Trust verden
Med voksende trusler, nye EU-krav og øget kompleksitet er cybersikkerhed nu en central ledelsesopgave på linje med strategi og økonomi.
09. august 2008 - 21:01
#1
Den ligger ikke 10 timer til med 1 dag inttostr(trunc(now-ProgramStart)) giver 1 hvis du går 24 timer frem. og h i FormatDateTime('h:nn:ss'... giver 0
09. august 2008 - 21:01
#2
Tryk fejl, det skulle være: Den ligger ikke 10 timer til men 1 dag
09. august 2008 - 23:00
#3
var prgStartTime:longInt; function calcTime(const chkTime:longInt;const decimals:byte=2):string; begin result:=currToStrF(((getTickCount-chkTime)/1000),ffFixed,decimals); if (decimals>0) and (result='0') then result:='0.0'; result:=result+' sec' end; procedure TForm1.FormCreate(Sender: TObject); begin prgStartTime:=windows.getTickCount end; procedure TForm1.Timer1Timer(Sender: TObject); begin label1.caption:='"uptime": '+calcTime(prgStartTime) end;
10. august 2008 - 00:26
#4
Man plejer da at kunne regne med delphis datetime type hvorfor trunc /frac
10. august 2008 - 00:47
#5
Dette virker og giver dig det ønskede format: Label1.Caption:='Oppetid: '+inttostr(trunc((now-ProgramStart)*24))+FormatDateTime(':nn:ss', Frac(now-ProgramStart));
10. august 2008 - 02:28
#6
kroning >> Dit eksempel virker ikke - når der er gået en time, så starter den ved 0:00:00 igen
10. august 2008 - 09:52
#7
Det var da mærkeligt, på min computer virker det fint.
10. august 2008 - 12:48
#8
Hmm, er der nogen anden måde at kunne løse det på?
10. august 2008 - 12:54
#9
Der er mange måder men koden: inttostr(trunc((now-ProgramStart)*24)) er jo så enkelt at det skal virke og det virker jo som nævnt fint her. Hvad får du hvis du: Starter programmet og går 25 timer frem og kører denne kode: Showmessage(inttostr(trunc((now-ProgramStart)*24)));
10. august 2008 - 13:04
#10
kan du ikke bare bruge : FormatDateTime('hh:nn:ss', now-ProgramStart);
10. august 2008 - 13:54
#11
Det virker heller ikke - der står 3 cifre ved antallet af timer.
10. august 2008 - 13:55
#12
martinlind> Prøv at læse om hvad TDateTime er for en værdi, og så evt. prøve koden af inden du poster den. Dit forslag vil ikke virke.
10. august 2008 - 14:22
#13
Kroning - det virker, hvis jeg går en hel dag frem. Så står der 24 timer - men hvis jeg kun går et par timer frem, så står der stadig 0
10. august 2008 - 14:25
#14
- ok, jeg har testet det lidt mere. I min label bliver antallet af timer kun opdateret, hvis jeg går frem med en dag eller mere. Men ved showmessage virker det fint, selvom jeg går mindre frem end en dag.
10. august 2008 - 14:33
#15
Så må der være en fejl i din kode der sætter din Label. Denne del i Showmessage: inttostr(trunc((now-ProgramStart)*24)) er jo 100% magen til denne del i Label1.caption:= inttostr(trunc((now-ProgramStart)*24))
10. august 2008 - 14:42
#16
Det var paranteserne, der manglede... :-) Læg et svar, Kroning.
10. august 2008 - 14:56
#17
Ja, der var jo en grund til at jeg havde sat dem :-)
10. august 2008 - 22:35
#18
kroning >> læs min post igen, ikk, ? var ligesom impilicit i det jeg skrev.
Kurser inden for grundlæggende programmering