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

Если указанные выше условия не выполнены, т.е. сервер не запущен ни зара-
нее, ни в момент запуска вашего приложения, то даже, если он потом будет запу-
щен, перед установлением контакта с ним вам потребуется применить метод Set-
Link. Дело в том, что в этих условиях установленные при проектировании значе-
ния свойств DdeService и DdeTopic стираются, а повторно установить их можно
только методом SetLink. To же самое надо иметь в виду, если вы в своем приложе-
нии закрыли соединение с сервером методом CloseLink или установили связь с
другим сервером. После этого контакт прервется и его надо восстанавливать мето-
дом SetLink.

Если свойство ConnectMode компонента установлено в ddeManual, но в про-
цессе проектирования вы установили свойства DdeService и DdeTopic, то для уста-
новления контакта вам достаточно выполнить метод OpenLink. Если же DdeServi-
ce и DdeTopic не установлены или в процессе работы приложения вы хотите пере-
ключаться на связь с другими серверами, то прежде, чем начать работать с серве-
ром, надо выполнить метод SetLink, устанавливающий имена сервера и темы.
Если при этом ConnectMode = ddeAutomatic, то автоматически устанавливается
контакт с сервером. Если же ConnectMode = ddeManual, то для установления кон-
такта после SetLink надо применить метод OpenLink.

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

ConnectMode	DdeService и DdeTopic	————————————^ Контакт
ddeAutomatic	Установлены при проектировании	Автоматический
	Не установлены при проектировании, или изменены, или контакт был прерван	SetLink
ddeManual	Установлены при проектировании	OpenLink
	Не установлены при проектировании, или изменены, или контакт был прерван	SetLink OpenLink

Приведем несколько примеров. Пусть ваше приложение будет обмениваться
информацией только с одним заранее известным сервером и путь вы хотите в при-
ложении иметь кнопку (назовем ее BExchange), при щелчке на которой вы хотите
выполнить какие-то операторы обмена данными с сервером. Вы должны размес-
тить на своем приложении компонент DdeClientConv (назовем его DdeClient-
Convl) и эту кнопку.

Далее наиболее простой путь заключается в следующем. Вы устанавливаете в
DdeClientConvl требуемые значения свойств DdeService и DdeTopic, а затем зада-
ете свойство ConnectMode равным ddeAutomatic. Тогда в обработчике события
OnClick кнопки BExchange вам достаточно просто написать операторы обмена дан-
ными с сервером.

Если по каким-то причинам во время проектирования сервер вам не доступен,
то, задав при проектировании требуемые значения свойств DdeService и DdeTopic,
вы оставляете свойство ConnectMode, равным ddeManual. В этом случае, напри-
мер, в обработчике события формы OnCreate вы можете поместить оператор

if (! DdeClientConvl->OpenLink())

ShowMessage("Нет контакта с сервером '" + DdeClientConvl->

DdeService + "' по теме '" + DdeClientConvl->DdeTopic + "'");

Этот оператор обеспечит контакт с сервером в момент запуска приложения
или соответствующее сообщение об ошибке. Другой путь — поместить в обработ-
чик события OnClick кнопки BExchange операторы