Ich würde im Timer-Ereignis einfach das Interval in Abhängigkeit von der Ungenauigkeit korrigieren. Hier ein Schnippel;
Delphi-Quellcode:
Procedure TForm1.StartButtonClick (Sender : TObject);
Begin
Timer1.Interval := 1000;
Start := Now;
NumberOfSeconds := 0;
Timer1.Enabled := True;
End;
procedure TForm16.Timer1Timer(Sender: TObject);
Var
elapsed : Double;
begin
elapsed := 86400*(Now-Start);
inc (NumberOfSeconds );
Timer1.interval := Trunc(1000*(1 - Elapsed + NumberOfSeconds )); // Interval korrigieren
// Test-Code zum Anzeigen: Anzahl der Sekunden, vergangene Sekunden seit Start, korrigiertes Interval
Memo1.Lines.add(Format('%.4d %8.1f %4d',[NumberOfSeconds , elapsed, timer1.interval]));
end;
Läuft wie ein Uhrwerk