Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
673 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Restlaufzeit bei Delay Anzeigen

  Alt 26. Nov 2023, 14:00
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.
Peter Below
  Mit Zitat antworten Zitat