Ответ 1
Ну да, конечно. AllocateHWnd
принимает TWndMethod
, чтобы действовать как оконная процедура созданного окна. Путаница, я думаю, вызвана тем, что компилятор принимает директиву messsage
. Не ставьте:
private
FHwnd : HWND;
procedure HandleMyMessage(var Message : TMessage);
..
procedure TMyClass.HandleMyMessage(var Message: TMessage);
begin
case Message.Msg of
TH_MYMESSAGE: //
end;
Message.Result := DefWindowProc(FHWnd, Message.Msg, Message.WParam, Message.LParam);
end;
изменить: (ответ на комментарий). Чтобы сообщение обрабатывалось классом, создавшим окно утилиты, вы можете перенаправить свое сообщение из окна AllocateHWnd, созданного в ваш класс:
private
FHwnd : HWND;
procedure HandleMyMessage(var Message : TMessage);
procedure THMyMessage(var Message: TMessage); message TH_MYMESSAGE;
..
procedure TMyClass.HandleMyMessage(var Message: TMessage);
begin
case Message.Msg of
TH_MYMESSAGE: Dispatch(Message);
end;
Message.Result := DefWindowProc(FHWnd, Message.Msg, Message.WParam, Message.LParam);
end;
procedure TMyClass.THMyMessage(var Message: TMessage);
begin
//
end;