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?