Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Описание компонентов VCL >> Динамический обмен данными (DDE) >> Динамический обмен данными (DDE). TDDEClientConv
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Динамический обмен данными (DDE). TDDEClientConv


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

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

(Pb) property DDEService: String;

(Pb) 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 отсутствует), то делается попытка загрузить программу с именем, определенным в свойстве

(Рb) 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; waitFlg: Boolean): Boolean;

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

(Ro) property WaitStat: Boolean;

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

function RequestData(const Item: string): PChar;

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

(Ro) property DDEFmt: Integer;

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

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

(Ro) property Conv: HConv;

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

(Pb) property FormatChars: Boolean;

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

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

(Pb) property OnOpen: TNotifyEvent;

(Pb) property OnClose: TNotifyEvent;

Свойство

property DataMode: TDataMode;

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



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017