Avatar billede hclarsen Nybegynder
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?
Avatar billede kroning Nybegynder
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
Avatar billede kroning Nybegynder
09. august 2008 - 21:01 #2
Tryk fejl, det skulle være:
Den ligger ikke 10 timer til men 1 dag
Avatar billede mbsnet Nybegynder
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;
Avatar billede martinlind Nybegynder
10. august 2008 - 00:26 #4
Man plejer da at kunne regne med delphis datetime type

hvorfor trunc /frac
Avatar billede kroning Nybegynder
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));
Avatar billede hclarsen Nybegynder
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
Avatar billede kroning Nybegynder
10. august 2008 - 09:52 #7
Det var da mærkeligt, på min computer virker det fint.
Avatar billede hclarsen Nybegynder
10. august 2008 - 12:48 #8
Hmm, er der nogen anden måde at kunne løse det på?
Avatar billede kroning Nybegynder
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)));
Avatar billede martinlind Nybegynder
10. august 2008 - 13:04 #10
kan du ikke bare bruge :

FormatDateTime('hh:nn:ss', now-ProgramStart);
Avatar billede hclarsen Nybegynder
10. august 2008 - 13:54 #11
Det virker heller ikke - der står 3 cifre ved antallet af timer.
Avatar billede kroning Nybegynder
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.
Avatar billede hclarsen Nybegynder
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
Avatar billede hclarsen Nybegynder
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.
Avatar billede kroning Nybegynder
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))
Avatar billede hclarsen Nybegynder
10. august 2008 - 14:42 #16
Det var paranteserne, der manglede... :-)

Læg et svar, Kroning.
Avatar billede kroning Nybegynder
10. august 2008 - 14:56 #17
Ja, der var jo en grund til at jeg havde sat dem :-)
Avatar billede martinlind Nybegynder
10. august 2008 - 22:35 #18
kroning >> læs min post igen, ikk, ? var ligesom impilicit i det jeg skrev.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester