Hallo zusammen,
ich möchte gerne die Restlaufzeit von Delay Anzeigen lassen.
Die Grund Procedure habe ich aus der Codelibary:
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
(MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
if Application.Terminated
then Exit;
Milliseconds := Tick - GetTickcount;
Form1.Label1.Caption:=milliseconds.ToString;
Form1.Label1.update;
end;
finally
CloseHandle(Event);
end;
end;
Problem:
Das Label Aktualisiert sich nur, wenn die Maus bewegt wird, ansonsten bleibt es stehen bzw. ändert sich nur sporadisch.
Welche Alternative habe ich dazu?
Lass es einfach, delays haben in dem main (UI) thread nichts verloren. Wenn Du glaubst sie zu benötigen deutet das auf einen Fehler im Design hin.
Wenn es denn unbedingt sein muss: warte nicht die volle von "milliseconds" definierte Zeit sondern halt nur 100 msecs. Dadurch kehrt MsgWait... regelmäßig zurück auch wenn keine Message in der Queue ist. Natürlich mußt Du dann die while-Bedingung anpassen.