406___________________________________________Глава 6

DdeClientConvl->SetLink(sServer, sTopic);

if ( ! DdeClientConvl->OpenLink() )

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

DdeService + "' по теме '" + DdeClientConvl->DdeTopic + "''
< операторы обмена данными с сервером >

В этих операторах предполагается, что параметры sServer и sTopic содержат
соответственно имя сервера и имя темы. Отметим, что в этом случае нельзя огра-
ничиться только вторым оператором OpenLink. Дело в том, что в первый раз он
сработает нормально. Но при последующих щелчках на кнопке BExchange он бу-
дет выдавать ошибки, поскольку метод OpenLink возвращает false не только в слу-
чае невозможности связаться с сервером, но и в случаях, когда контакт в данный
момент уже установлен. Впрочем, это относится только к возвращаемой величине.
Если сообщения об ошибках вас не интересуют, то вы можете существенно сок
тить приведенный код:

DdeClientConvl->OpenLink();

< операторы обмена данными с сервером >

Аналогичное приведенному ранее последовательное обращение к методам Set- '
Link и OpenLink надо применять и в приложениях, работающих с несколькими
разными серверами с помощью одного компонента DdeClientConv. Такое же обра-
щение используется и в случае, если вы не устанавливали в процессе проектирова-
ния свойства DdeService и DdeTopir.

Все сказанное ранее относилось к установлению контакта с определенным сер-
вером по определенной теме. Но имеется еще одна возможность — установление
контакта с заранее неизвестным сервером, который поместил информацию о себе в
буфер обмена Clipboard. Приложение-сервер, разработанное с помощью C++Buil-
der, может сделать это методом CopyToClipboard компонента DdeServerItem (об
этом методе и компоненте будет подробнее рассказано в следующем разделе). Чт"-
бы установить контакт со стороны клиента с сервером, поместившим информац;

в буфер обмена, надо выполнить метод PasteLink компонента DdeClientConv. На
пример:

if ( ! DdeClientConvl->PasteLink())
ShowMessage(

"В буфере обмена не обнаружено данных, доступных обработке.");

Если в буфере обмена есть соответствующие данные, то метод PasteLink зане-
сет имена сервера и темы в свойства DdeService и DdeTopic и установит контакт с
этим сервером. Таким образом, этот метод заменяет рассмотренные ранее методы
SetLink и OpenLink, устанавливая контакт с заранее неизвестным сервером.

6.5.3 Обмен данными между клиентом и сервером

6.5.3.1 Построение приложения-сервера

Теперь перейдем к рассмотрению обмена данными между клиентом и серве-
ром. Данные, содержащиеся на сервере, которые могут быть переданы клиентам,
обеспечивает компонент DdeServerItem. Основные свойства этого компонента —
Lines — набор строк, представляющий собой передаваемую информацию, и Ser-
verConv — имя компонента DdeServerConv, т.е. имя темы, к которой относится
данная информация. Если свойство ServerConv не установлено, то считается, что
имя темы — заголовок (Caption) формы приложения-сервера.

Свойство Text компонента DdeServerItem автоматически устанавливается
равным первой строке свойства Lines. Но если вы устанавливаете свойство Text не-
посредственно, это значение заносится в первую строку Lines, а остальные строки
очищаются.