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

Реализация динамического обмена данными методом dde

Динамический обмен данными (Dynamical Data Exchange — DDE) — это технология, появившаяся на заре Windows, но сохраняющая свое значение и до сих пор, поскольку предоставляет удобный способ обмена данными между программами. Смысл данной технологии в том, что приложения обмениваются текстовыми данными через глобальную (внешнюю) память во время своего выполнения. При этом связь между двумя программами можно установить таким образом, что изменения в одном приложении будут отражаться во втором. Например, если Вы меняете число в электронной таблице, то во втором приложении данные обновятся автоматически и отобразят изменения. Кроме того, с помощью DDE можно из своего приложения управлять другими приложениями такими, как Word for Windows, Report Smith, Excel и др. (рис. 2.20).

Рис. 2.20. Идея динамического обмена данными между отдельными процессами

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

Таким образом, взаимодействие dde может выполнять следующие операции:

  • передача клиенту данных от сервера по инициативе клиента;

  • передача клиенту данных от сервера при их обновлении;

  • передача данных от клиента к серверу;

  • передача команд (макросов) от клиента к серверу;

  • установка клиентом данных на сервере.

Всю сложную задачу обработки в процессе диалога множества сообщений Windows берут на себя, как правило, системы ООП, инкапсулируя все необходимые процедуры в соответствующих компонентах библиотек.

Так, например, для систем C++Builder и Delphi - это четыре компонента, расположенных в библиотеке на странице System: DdeClientConv, DdeClientltem, DdeServerConv и DdeServerltem. Первые два из них организуют работу клиента, а два вторые — работу сервера.

Для построения DDE-сервера в проекте обычно используется один объект TDdeServerConv и один или более TDdeServerItem (рис.2.21).

Рис.2.21: Пример DDE-сервера в среде Delphi

Назначение объекта TDdeServerConv - общее управление DDE и обработка запросов от клиентов на выполнение макроса. Его единственное свойство — имя Name. Это имя является именем темы, которое должен знать клиент при установлении и разрыве контакта с сервером. Выполнение макроса организуется в обработчике события OnExecuteMacro, например:

procedure TDdeSrvrForm.doMacro(Sender: TObject; Msg: TStrings); var Text: string; begin Text := ''; if Msg.Count > 0 then Text := Msg.Strings[0]; MessageDlg ('Executing Macro - ' + Text, mtInformation, [mbOK], 0); end;

Аналогично серверу для построения DDE-клиента, в программе обычно используется один объект TDdeClientConv и один и более связанных с ним TDdeClientItem (рис. 2.22.).

Рис. 2.22: Пример DDE-клиента в среде Delphi

TDdeClientConv служит для установления связи с сервером и общим управлением DDE-связью. Связь с сервером можно установить как во время дизайна (причем двумя способами), так и во время выполнения программы.

Первый способ - заполнить вручную такие необходимые свойства компонента, как: DdeService, DdeTopic и ServiceApplication. Параметры метода Service и Topic устанавливают соответственно значения свойств DdeService и DdeTopic. Установить значения этих свойств во время выполнения прямым присваиванием невозможно.

Второй вариант – с помощью специального диалога для определения DDE-связи (во время дизайна щелкните дважды на одно из первых двух свойств в Инспекторе Объектов рис.2.23 )

Рис. 2.23: Диалог для установления связи с DDE-сервером (Report Smith).

Укажите в диалоге имена DDE Service и DDE Topic. Эти имена можно узнать из документации по тому DDE-серверу, с которым Вы работаете. В случае DDE-сервера, созданного на Delphi, это имя программы (без .EXE) и имя объекта TDdeServerConv. В этом же диалоге есть специальная кнопка Past Link для установления связи через Clipboard. Ей можно воспользоваться, если Вы запустили DDE-сервер, сохранили каким-то образом информацию о связи и вошли в этот диалог.

Свойство ServiceApplication заполняется в том случае, если в поле DdeService содержится имя, отличное от имени программы, либо если эта программа не находится в текущей директории. В этом поле указывается полный путь и имя программы без расширения (.EXE). При работе с Report Smith здесь нужно указать, например: C:\RPTSMITH\RPTSMITH.