Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Справочник по компонентам Delphi.doc
Скачиваний:
146
Добавлен:
02.05.2014
Размер:
1 Mб
Скачать

Компонент tdDeServerltem

TObject—”TPersistent—>TConiponent-”TDDeServerI tern

Модуль DDEMAN

Страница Палитры компонентов System

Этот компонент реализует элемент данных, которые при установленном кон­такте будут передаваться клиенту. В принципе, протокол DDE подразумевает обмен любыми данными, формат которых зарегистрирован в буфере обмена. Но для рассматриваемых компонентов Delphi эти возможности ограничиваются

только текстовыми данными. Так что свойство, содержащее формат обмена данными,

property Fmt: Integer;

всегда равно CF_TEXT. Данные содержатся в свойствах:

(^ property Text: string;

(Йэ) property Lines: TStrings;

По сути дела, первое свойство представляет собой подмножество второго. При чтении Text равен первой строке Lines. Но если вы присваиваете ему значение, все прочие строки Lines очищаются. Элемент данных должен быть связан с определенной темой. В свойстве:

(Pb) property ServerConv: TDDeServerConv;

может быть задана ссылка на компонент типа TDDEServerConv, чье имя будет темой контакта DDE. Можно обойтись и без использования такого компо­нента. В этом случае именем темы будет являться заголовок (Caption) той формы, которая содержит TDDEServerItem. Элемент данных может быть скопирован в буфер обмена в специальном фор­мате (в виде информации о контакте), с помощью метода:

procedure CopyToClipboard;

Для вступления в контакт посредством буфера обмена клиент может вызвать функцию GetPasteLinkInfo (см. ниже), и, проанализировав имена сервера, темы и элемента, принять решение о вступлении. Клиент может переустановить данные сервера. При переустановке возникает событие:

(Pb) property OnPokeData: TNotifyEvent;

Кроме того, для этого вами может быть использован метод:

function PokeData(Data: HDDeData): Longint;

Параметр Data должен представлять собой дескриптор области памяти, в которой содержится текстовая строка типа pChar. В отличие от OnPokeData, событие:

(Pb) property OnChange: TNotifyEvent;

возникает при любом изменении данных, как при присвоении значений свой­ствам Text или Lines, так и при вызове PokeData. Оно может также быть вызвано явно из метода: ^

procedure Change;

Компонент 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;

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

Соседние файлы в папке Delphi