Also die Zeit zu messen in dem man im Timer OnTimer Ereignis die Zeit, bzw. Ticks addiert ist leider ein unsinniges Unterfangen. Das Intervall ist nicht gleichmäßig. Stellt man das Intervall auf 100 ms, kann, wird aber eher nicht, das Ereignis 10 mal in der Sekunde aufgerufen werden. Somit bringt das nichts.
Besser ist den Zeitunterschied zu messen, z. B. so:
Delphi-Quellcode:
uses
DateUtils;
var
T1, T2: TTime;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1;
Timer1.Enabled := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
T1 := 0;
T2 := 0;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
MSBetween: Int64;
TimeTemp: TTime;
begin
if T1 = 0 then
T1 := Time;
T2 := Time;
MSBetween := MilliSecondsBetween(T1, T2);
TimeTemp := MSBetween / 24 / 60 / 60 / 1000;
Label1.Caption := FormatDateTime('hh:nn:ss:zzz', TimeTemp);
end;
Beim Start wird die aktuelle Uhrzeit gemessen. Danach wird immer die Differenz zu der Startzeit gemessen. Da die Uhrzeit separat getaktet wird, sollte PC Auslastung keine Rolle spielen.
//EDIT:
Ich hab mir das Ganze mal angeguckt und da sind einige unnötige Zeilen. Der Code oben nur etwas kürzer:
Delphi-Quellcode:
uses
DateUtils;
var
T1: TTime;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1;
Timer1.Enabled := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
T1 := 0;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
TimeTemp: TTime;
begin
if T1 = 0 then
T1 := Time;
TimeTemp := MilliSecondsBetween(T1, Time) / 24 / 60 / 60 / 1000;
Label1.Caption := FormatDateTime('hh:nn:ss:zzz', TimeTemp);
end;