Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Message korrekt behandeln

  Alt 18. Sep 2022, 14:37
Ich stelle mir gerade auch die Frage wie man eine Message korrekt abarbeitet.
In einem TThread sende ich mit PostMessage den aktuellen Progress in % an WndProc
Delphi-Quellcode:
if ProgressPercent > ProgressPercentOld then
 begin
  PostMessage(FDestinationWindowHandle, WM_PB_MAIN, ProgressPercent, WM_PB_SET_HINT);
  ProgressPercentOld := ProgressPercent;
 end;
Mein WndProc
Delphi-Quellcode:
procedure TForm1.WndProc(var msg: TMessage);
begin
 if TMessageHandlerThreads.WndProc(msg) then
  Dispatch(msg);

 inherited;
end;

function TMessageHandlerThreads.WndProc(msg: TMessage): Boolean;
begin
 Result := False;

 case msg.msg of
  WM_PB_MAIN:
   begin
    MainForm.ProgressBar1.Position := msg.WParam;

    case msg.LParam of
     WM_PB_SET_HINT:
      MainForm.ProgressBar1.Hint := IntToStr(msg.WParam) + '%';
    end;

    Result := True;
   end;
 end;
end;
Es gibt auf anderen Computern, wohl sehr selten, das Problem, dass der Progress direkt auf 100% springt.
Da mir die Leute die das Problem haben aber nie alle Details nennen und ich alles mühselig erfragen muss, habe ich sonst keine Ahnung wie das Problem bei denen aussieht.

Das DispatchMessage(msg); in WndProc habe ich eben hinzugefügt in der Hoffnung, dass das problem weg ist.
Fehlt da sonst noch irgendwas?

Es kommt in den Logs auch Fehler #1444 - aber nur auf manchen Rechnern, nicht bei allen. Ich vermute das sind alles Win11 PCs.

In einem anderen Thread lese ich:
Zitat:
Auf MSDN erfährt man zu Postthreadmessage: "The function fails if the specified thread does not have a message queue."
Ein try-except um mein PostMessage, wäre das eine Idee?

Geändert von DieDolly (18. Sep 2022 um 16:05 Uhr)
  Mit Zitat antworten Zitat