Da Ihre Anwendung läuft, können Sie das Idle-Ereignis verwenden, um zu sehen, ob ein voreingestelltes Datum/eine voreingestellte Zeit bereits verstrichen ist, und wenn ja, können Sie Ihre Zeitmessung durchführen. Der einzige Nebeneffekt dieses Ansatzes ist, dass Ihr Ereignis nicht ausgelöst wird, wenn die Anwendung beschäftigt ist, aber dann würde auch ein Timer nicht funktionieren (damit der TTimer funktioniert, muss die Nachrichtenwarteschlange verarbeitet werden, oder die Anwendung muss "Idle" sein, es sei denn, Sie verwenden einen threaded Timer).
uses
...,DateUtils; // contains IncMinute
type
TForm1 = Class(TForm)
:
procedure FormCreate(Sender: TObject);
private
fTargetDate : tDateTime;
procedure AppIdle(Sender: TObject; var Done: Boolean);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fTargetDate := 0.0;
Application.OnIdle := AppIdle;
fTargetDate := IncMinute(Now,2);
end;
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
if (fTargetDate <> 0.0) and (Now >= fTargetDate) then
begin
fTargetDate := 0.0;
ShowMessage('started');
end;
end;
EDIT Wenn Sie etwas mehrmals ausführen müssen, legen Sie es in einer nach Datum/Uhrzeit geordneten Liste ab und verfolgen Sie dann nur das NÄCHSTE Mal, wenn etwas ausgeführt werden soll. Wenn etwas ausgeführt wird, wird es aus der Liste entfernt (oder wieder in die Liste aufgenommen und die Liste neu sortiert).