ワーカー スレッドでメッセージを処理する場合は、メッセージ ループを手動で実行する必要があります。たとえば、次のようになります。
procedure TMyThread.Execute;
var
Msg: TMsg;
begin
...
while GetMessage(Msg, 0, 0, 0) > 0 then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
...
end;
または:
procedure TMyThread.Execute;
var
Msg: TMsg;
begin
...
while not Terminated do
begin
...
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
...
end;
...
end;
または:
procedure TMyThread.Execute;
var
Msg: TMsg;
begin
...
while not Terminated do
begin
...
if MsgWaitForMultipleObjects(0, nil, FALSE, SomeTimeout, QS_ALLINPUT) = WAIT_OBJECT_0 then
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
...
end;
...
end;