Справочник по компонентам Delphi. Часть 2
Страница 54. Компонент TDDECIIentConv


 

Компонент TDDECIIentConv

TObject->TPersistent->TComponent—>TDDEClientConv
Модуль DDEMAN
Страница Палитры компонентов System

Компонент TDDEClientConv осуществляет контакт на клиентской стороне. Именно в нем описаны методы, отвечающие за установление контакта. Имена требуемых сервера DDE и темы содержатся в свойствах:

§ property DDEService: String;
property DDETopic: String;

Сервер и тема устанавливаются при вхождении в контакт. Предусмотрены два режима вхождения в него:

(Pb) property ConnectMode: TDataMode;
TDataMode= (ddeAutomatic, ddeManual);
Метод
function SetLink(const Service: string; const Topic: string): Boolean;

присваивает серверу и теме имена, равные Service и Topic, а если выбран режим контакта ddeAutomatic — то и устанавливает контакт. Будьте внима­тельны при задании параметров метода— здесь учитывается регистр символов. В случае режима ddeManual для установления контакта необходимо вызвать дополнительно метод:

function OpenLink: Boolean;

Этот метод сначала закрывает предыдущий контакт, затем он пытается свя­заться с сервером DDEService на тему DDETopic. Если это не удается сразу (например, если требуемый сервер DDE отсутствует), то делается попытка загрузить программу с именем, определенным в свойстве

(Pb) property ServiceApplication: String;

и установить контакт с ней. Если оно не определено (ServiceApplication = "), то в качестве последней попытки для контакта пробуется имя, представляющее собой конкатенацию имен сервера и темы, разделенных пробелом. В случае неудачи метод OpenLink возвращает False.

Можно связаться с сервером, если он поместил данные о контакте в буфер обмена. В этом случае метод

function PasteLink: Boolean;

переключит компонент на новый контакт и вернет значение True. Наконец, метод

procedure CloseLink;
разрывает контакт с сервером DDE.
Метод
function StartAdvise: Boolean;

инициирует начало обмена данными. Обычно он вызывается в методе OpenLink.

Как уже упоминалось, основное направление потоков данных — от сервера к клиенту, однако возможно и обратное. При помощи двух методов можно присвоить новые значения элементу данных сервера:

function PokeDataLines(const Item: string; Data: TStrings): Boolean;
function PokeData(const Item: string; Data: PChar): Boolean;

Здесь Item — имя элемента данных, Data — передаваемые текстовые данные. Кроме того, некоторые серверы DDE имеют собственные наборы макрокоманд, запрос на выполнение которых можно послать от клиента. К ним относятся многие приложения, в т. ч. СУБД и электронные таблицы, такие, как Paradox и MS Excel; наиболее типичным примером служит Program Manager. Запрос на выполнение макрокоманд посылают методы:

function ExecuteMacroLines(Cmd: TStrings; waitFIg: Boolean): Boolean-function ExecuteMacro(Cmd: PChar; waitFIg: Boolean): Boolean;

Серверу может потребоваться определенное время для выполнения этих опе­раций. Если до их окончания снова загрузить его работой, то это может привести к непредсказуемым результатам. Чтобы отследить состояние сервера, нужно установить параметр функции waitFIg в True. С началом операции свойство

(Ro) property WaitStat: Boolean;

устанавливается в True. При этом вызовы последних четырех описанных ме­тодов отрабатываться не будут, пока сервер не известит об окончании опе­рации, и WaitStat не примет значение False. Это свойство доступно только по чтению. Клиент может запросить данные от сервера немедленно с помощью метода:

function RequestData(const Item: string): PChar;

Формат обмена данными можно узнать из свойства:

(Ro) property DDEPmt: Integer;

Перефразируя Генри Форда, скажем, что можно обмениваться данными любого формата, если этот формат — CF_TEXT.

 

Если возможностей, предоставляемых методами и свойствами класса, недоста­точно, то для вызова процедур библиотеки DDEML программисту доступен дескриптор контакта:

(Ro) property Conv: HConv;

В полученном от сервера тексте могут быть специальные управляющие символы — <Enter>, <Tab>, <Backspace> и другие. Их можно отфильтровать (подавить), если свойство

(Pb) property FormatChars: Boolean;

установлено в False. В этом случае все символы ASCII с десятичными кодами от 1 до 31 заменяются на пробел (код 32). В случае True преобразования не происходит.

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

(pk) property OnOpen: TNotifyEvent;
(Pb) property OnClose: TNotifyEvent;
Свойство
property DataMode: TDataMode;

по-видимому, зарезервировано ддя дальнейших применений.

 
« Предыдущая статья   Следующая статья »