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


Рабочий пример


Ну, теперь - о главном. Вниманию уважаемой публики предлагается простой модуль с иерархией объектов, реализующих вышеописанные методы нотификации.

Для удобства использования серверами, находящимися в DLL, и экспортирующими только функции (не классы), необходимые клиенту определения вынесены в отдельный unit:

(********************************************************************* * Notifier object definitions * *********************************************************************) unit NotifyDef; interface uses Windows; const tnEvent = 0; // Use kernel object Event (SetEvent) tnThreadMsg = 1; // Use message to thread ID (PostThreadMessage) tnWinMsg = 2; // Use message to window HWND (PostMessage) tnCallBack = 3; // Asynchronous call user function TNotifierProc tnCallEvent = 4; // Asynchronous call object event handler TNotifierEvent type TNotifierProc = procedure(Owner: THandle; Msg,UserParam : dword); TNotifierEvent = procedure(Sender : TObject; Msg,UserParam : dword) of object; implementation end.

Для создания объекта нотификатора заданного типа сервер может использовать функцию (см. модуль ):

function MakeNotifier(hEventObj,hSender : THandle; EventType : byte; MsgID,UserParam : dword) : TNotify;

Описание параметров ПараметрНазначение Значение, использование в способах нотификации Событие Сообщение потоку Сообщение окну Процедура клиента
hEventObj Хэндл низкоуровнего объекта, используемого для нотификации хэндл события - результат вызова CreateEvent ID потока (можно узнать GetCurrentThreadID) хэндл окна адрес процедуры
hSender Условный хэндл объекта сервера - то, что сервер хочет сообщить о себе не используется TMessage.LParam TMessage.LParam Owner в TNotifierProc
EventType Тип объекта нотификатора - см. константы в модуле tnEvent tnThreadMsg tnWinMsg tnCallBack
MsgID Идентификатор сообщения не используется TMessage.Msg TMessage.Msg Msg в TNotifierProc
UserParam Пользовательский параметр не используется TMessage.WParam TMessage.WParam UserParam в TNotifierProc
Собственно, параметры hSender,MsgID,UserParam могут быть заряжены произвольными данными на усмотрение программиста, нотификаторы не используют их для своих нужд.




Начало  Назад  Вперед