Взаимодействие приложения с внешними программами______________411

Методы PokeData и PokeDataLines позволяют изменить информацию, храня-
щуюся в компоненте DdeClientItem на сервере. Их можно использовать, если ком-
понент DdeClientConv уже связан с сервером. Методы определены следующим об-
разом:

bool PokeData(const System::AnsiString Item, char *Data);

bool PokeDataLines(const System::AnsiString Item,
\      Classes::TStrings* Data);

В обеих функциях параметр Item определяет имя компонента DdeServerItem
на сервере, в который заносится информация, а параметр Data — тот текст, кото-
рый должен заменить информацию на сервере. Различие между методами в том,
что в PokeData в качестве параметра Data передается строка с нулевым символом
в конце, а в функцию PokeDataLines — набор строк типа TStrings.

Функции возвращают true, если передача данных прошла успешно.
Реализовать подобное изменение информации на сервере в вашем приложе-
нии-клиенте можно, например, вставив в обработчик щелчка на кнопке PokeData
оператор:

if ( ! DdeClientConvl->PokeDataLines(DdeClientIteml->DdeItem,

Memol->Lines))
ShowMessage("Данные не переданы, нет контакта с сервером");

При записи этого оператора предполагается, что прежде, чем делать щелчок
на кнопке PokeData, пользователь войдет в контакт с сервером, нажав кнопку Кон-
такт. В этом случае в свойстве DdeClientIteml->DdeItem хранится имя компонента
DdeServerItem на сервере, соответствующего теме, которая задана пользователем.
В этот компонент DdeServerItem передается информация, которую пользователь
задал в окне редактирования Memol.

Запустите приложение, установите связь с сервером кнопкой Контакт, набери-
те строки в окне Memol и щелкните на кнопке PokeData. Вы увидите, что инфор-
мация в окне Editi изменится. Это будет свидетельствовать об изменении инфор-
мации на сервере. Вы можете в этом убедиться, прервав связь с сервером (отжав
кнопку Контакт) и вновь установив связь кнопкой Контакт или Запрос.

Выполнение методов PokeData и PokeDataLines сопровождается событием
OnPokeData того компонента DdeServerItem на сервере, в который передается ин-
формация. Вы можете использовать это событие в серверах, чтобы, например, ото-
бразить пользователю полученную информацию. Для этого добавьте в серверы мет-
•:у Label и в обработчик событий OnPokeData обоих компонентов DdeServerItem
внесите, оператор

Labell->Caption = "Получены данные: '" +

((TDdeServerItem *)Sender)->Text +"'";

Этот оператор занесет в надпись метки информацию того компонента DdeSer-
verItem, в который она поступила.

Другой способ передачи данных серверу — методы ExecuteMacro и Execute-
MacroLines компонента DdeClientConv. Эти методы не изменяют информацию на
сервере, а просто передают на сервер некоторый текст — макрос. Сервер может
анализировать переданный макрос и выполнять те или иные действия. Для этого
анализа используется событие OnExecuteMacro компонента DdeServerConv серве-
ра.

Методы ExecuteMacro и ExecuteMacroLines можно использовать, если компо-
нент DdeClientConv уже связан с сервером. Методы определены следующим обра-
зом:

bool ExecuteMacro(char * Cmd, bool WaitFIg);

bool ExecuteMacroLines(Classes::TStrings* Cmd, bool WaitFIg);