Wenn man eine Zeit messen möchte, sollte man nicht irgendeinen Zähler per Timer erhöhen, denn das kann grössere Abweichungen (bis zu 20%) geben.
Wenn Windows oder deine Anwendung voll ausgelastet sind, kommen die Timer-Ereignisse verzögert oder zeitweise gar nicht.
So wird's gemacht:
Delphi-Quellcode:
TForm1 = class(Tform)
private
FStartup : TDateTime;
end;
procedure TForm1.FormCreate();
begin
FStartup := Now; // wie merken uns die Startzeit
end;
function TimeDiffToStr(timediff: TDateTime): string;
var
h,n,s,z: Word;
begin
DecodeTime(timediff,h,n,s,z);
if h > 0 then
Result := Format('%d:%.2d:%.2d',[h,n,s])
else
Result := Format('%.2d:%.2d',[n,s]);
end;
// Timer-Event, dass jede Sekunde die Anzeige aktualisiert
procedure TForm1.TimerTimer();
var
timediff : TDateTime;
begin
timediff := now-FStartup;
Label1.Caption := 'Uptime: '+TimeDiffToStr(timediff);
end;