Статьи Королевства Дельфи

       

Сообщение окну


Сообщение окну удобно использовать, если клиентом является модуль с формой. Тогда достаточно в классе формы сделать обработчик этого сообщения:

procedure WMMyMessage(var Msg : TMessage); message WM_MYMESSAGE;
здесь код сообщения определен, например, так: const WM_MYMESSAGE = WM_USER+XXXX;

Сообщение посылается функцией PostMessage, а не SendMessage, чтобы сервер мог продолжить свою работу, не дожидаясь, пока клиент обработает сообщение. Таким свойством обладают все вышеописанные способы извещений.

Кстати, метод Synchronize(Method: TThreadMethod) класса TThread использует для общения с главным потоком программы именно оконное сообщение, посылаемое через SendMessage. При этом заданный в параметрах вызова Synchronize метод класса выполняется в контексте главного потока (main VCL thread), и его код является потокобезопасным (может обращаться к любым объектам VCL). Но (другая сторона медали) пока наш клиент в главном потоке занят фактически выполнением этого метода или другими делами (сообщения ставятся в очередь), сервер не может продолжить работу - он замер на вызове SendMessage. Часто это весьма нежелательно.



Содержание раздела