Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по СПр.doc
Скачиваний:
7
Добавлен:
16.12.2018
Размер:
690.69 Кб
Скачать

Завершение сеанса

Приложение-клиент или приложение-сервер могут завершить сеанс обмена с помощью посылки сообщения wm_DDE_Terminate. Приложение-клиент может сделать это следующим образом:

PostMessage(hWndServer, wm_DDE_Terminate, hWindow, 0)

Когда сервер получает сообщение wm_DDE_Terminate, он дол­жен ответить на него тем же сообщением, подтверждая завершение сеанса:

PostMessage(Msg.wParam, wm_DDE_Terminate, hWindow,0)

Управление Program Manager

Одно из интересных применений протокола DDE может быть реализовано в программе, управляющей Program Manager (PM). Установка сеанса с РМ выглядит обычным образом, сообщения посылаются в следующем формате:

[Command (Arguments) ]

Посылка команды может быть реализована следующим образом:

Procedure SendPMCommand(P: PChar);

Var

HCmd : THandle; {Сегмент памяти}

PCmd : PChar; {Указатель на сегмент}

Begin

If Linked then

Begin

HCmd := GlobalAlloc(gmem_Moveable or gmem_DDEShare, StrLen(P)+1);

If HCmd<0 Then

Begin

PCmd:=GlobalLock(HCmd);

If PCmd = Nil Then GlobalFree(HCmd)

Else

Begin

StrCopy(PCmd,P);

GlobalUnlock(P);

If not PostMessage(hWndPM,wmDDEExecute, hWindow, MakeLong(0,HCmd))

then GlobalFree(HCmd);

End;

End;

End

Else

MessageBox(hWindow, 'Failed to Link PM', 'Error', mb_Ok)

End;

Использование протокола динамического обмена данными мо­жет быть довольно комплексной задачей, но с помощью иерархии классов, например, Delphi, он реализуется довольно просто.

Реализация протокола с помощью компонентов Delphi

Приложения, использующие DDE, также разделяются на две категории: клиенты и серверы (не путать с одноименной архитектурой СУБД). Оба участника процесса осуществляют контакты (conversations) по определенным темам (topic), при этом в рамках темы производится обмен элементами данных (items). Устанавливает контакт DDE-клиент, который посылает запрос, содержащий имена контакта и темы. После установления контакта всякое изменение элемента данных на DDE-сервере передается элементу данных клиента.

Разработчики подсистемы DDE в Delphi, верные идеологии создания VCL, свели интерфейс этого протокола к четырем компонентам — двум для сервера и двум для клиента. На уровне поддержания контакта лежат компоненты TDDEServerConv и TDDEClientConv. Первый играет пассивную роль — он только указывает имя одной из поддерживаемых сервером тем. Все операции по установлению и разрыву контакта осуществляет из приложения-клиента компонент TDDECiientConv.

Посредством одного контакта могут быть связаны и синхронизированы несколько пар элементов данных. Для их описания предназначены компоненты TDDEServerItem И TDDEClientItem. Каждый из них во время работы должен указывать на контакт, к которому он привязан. Кроме того, в составе обоих есть свойства, содержащие некий текст. При установленном контакте их содержимое синхронизируется.