С классом (TObject) у меня есть :
private
FHwnd : HWND;
procedure HandleMyMessage(var Message : TMessage); message TH_MYMESSAGE;
где TH_MYMESSAGE = WM_USER + 1
В конструкторе класса:
FHwnd := AllocateHWND(HandleMyMessage);
Единственным объектом, который получает ссылку на FHwnd
, является частный пользовательский TThread (созданный в этом классе), и единственное сообщение, которое он публикует, — TH_MYMESSAGE
. Насколько я понимаю, директива message
в процедурной декларации ограничивает его обработку только TH_MYMESSAGE
.
Это отлично работало при тестировании, но при интеграции в гораздо более крупное приложение я получаю обратную связь, что HandleMyMessage
работает и для других сообщений (с очевидными нежелательными результатами).
Это было легко исправлено добавлением , если Message.Msg <> TH_MYMESSAGE то Exit;
в HandleMyMessage
. Мой вопрос: Почему это происходит?
Мое лучшее предположение состоит в том, что AllocateHWND
сделал HandleMyMessage
эквивалентом DefWndProc
, несмотря на то, что он имел директиву message
.Есть ли правильный способ реализовать это, которого мне не хватает?