Erstell doch einen Thread:
Delphi-Quellcode:
type
TScheduler = class(TThread)
private
FOnTimer: TNotifyEvent;
FTime: TDateTime;
protected
procedure DoTimer;
procedure Execute; override;
public
constructor Create(Time: TDateTime; OnTimer: TNotifyEvent);
end;
constructor TScheduler.Create(Time: TDateTime; OnTimer: TNotifyEvent);
begin
inherited Create(True);
FOnTime := OnTimer;
FTime := Time;
end;
constructor TScheduler.DoTimer;
begin
FOnTimer(Self);
end;
constructor TScheduler.Execute;
begin
Sleep(SecondsBetween(Now, FTime)*1000);
Synchronize(DoTimer);
end;
procedure TMainForm.MyEvent(Sender: TObject);
begin
ShowMessage('Happy Birthday');
end;
procedure TMainForm.Create(...);
begin
TScheduler.Create(
EncodeDateTime(2009, 11, 26, 01, 30, 0, 0), // Mein Geburtstag - die Uhrzeit ist aber geraten :P
MyEvent);
end;
Vorsicht: Nur hier im Editor getippt, also keine Garantie auf Fehlerfreiheit (die gibt es aber sowieso nicht
). Ich denke mal, dass Sleep in in diesem Zeitraum genau genug sein sollte - bleibt nur zu hoffen, dass es keine von Windows festgelegte Obergrenze oder soetwas gibt
. Theoretisch sollten aber Intervalle von bis zu ca. 24 Tagen damit möglich sein. Sicherlich geht es mit der
WinApi auch irgendwie eleganter. Du könntest dir mal in der CodeLib die Delay-Funktion anschauen.