Avatar billede morten_s Nybegynder
26. juni 2001 - 18:01 Der er 1 løsning

Opdater SekLabel

Jeg har oprettet nogle grafiske komponenter som skifter \"State\" under visse omstændigheder i mit program.
Under hver komponent har jeg en label som skal vise hvor lang tid der er gået siden sidste \"state\" skift.
For at begrænse antallet af timere i programmmet har jeg bare en hovedtimer som vipper med et flag en gang i sekundet.

mit problem er nu at tælle disse vip og overføre dem til min tidslabel. For at opnå dette har jeg forestillet mig følgende kode som kaldes 1. pr sekund


var
  Tid :TTime;

Begin
  Inc(Tid);
  Label1.Caption := TimeToStr(Tid);
end;

og da det ikke virker har jeg prøvet med

var
  hour, min, sec, msec : word;
begin
  DecodeTime(timer, Hour, min, sec, msec);
  timer := EncodeTime(hour, min, sec+1, msec);
  label2.caption := timetostr(timer);
end;

Hvilket virker i 60 sek.

Har nogen en elegant løsning på problemet ?
Avatar billede pellelil Nybegynder
26. juni 2001 - 18:12 #1
Jeg plejer selv i sådan et tilfælde at bruge \"GetTickCount\". Dette er \"en tæller\" der automatisk incrementes 1000 gange i sekundet. Når du således vil se hvor lang tid der er gået skal du bare \"måle\" hvor meget denne værdi er steget siden sidst

<SNIP>
var
  LastTick;
begin
  LastTick := GetTickCount;
  // Gør et eller andet
  Label1.Caption := \'Der er gået \' + FloatToStr((GetTickCount - LastTick) / 1000) + \' sekunder\';
end;
<SNIP>
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