Создает связь с уведомлением или автоматическую связь, используемые средством динамического обмена данными (DDE).

DDEAdvise(nChannelNumber, cItemName, cUDFName, nLinkType)

Параметры

nChannelNumber

Задает номер канала.

cItemName

Задает имя элемента. Например, Microsoft Excel ссылается на ячейки электронной таблицы, используя систему обозначений в виде номеров строк и столбцов. Имя элемента R1C1 определяет ячейку в первой строке и первом столбце электронной таблицы.

cUDFName

Задает пользовательскую функцию, которая выполняется в том случае, когда устанавливается связь с уведомлением или автоматическая связь и изменяется элемент cItemName. Когда пользовательская функция выполняется, ей передаются следующие шесть параметров в указанном порядке:

Параметр Содержимое

Channel Number (номер канала)

Номер канала приложения-сервера.

Action (действие)

ADVISE или TERMINATE.

Item (элемент)

Имя элемента; например, R1C1 в случае ячейки электронной таблицы Microsoft Excel.

Data (данные)

Новые данные (автоматическая связь) или пустая строка (связь с уведомлением)

Format (формат)

Формат данных, например CF_TEXT.

(статус уведомления)

Тип связи (0 = ручная, 1 = с уведомлением, 2 = автоматическая).

В операторе LPARAMETER или PARAMETER пользовательской функции должны быть предусмотрены шесть параметров, чтобы функция могла принять значения, переданные из приложения-сервера. Если устанавливается связь с уведомлением, выполняется функция, определенная пользователем, и в параметре Data передается пустая строка. Позже можно выдать функцию DDERequest( ) для получения данных. Если устанавливается автоматическая связь, выполняется функция, определенная пользователем, и данные передаются в параметре Data.

Параметр Action содержит значение ADVISE, если связь обновляется сервером. Вызывается функция, определенная пользователем, и когда связь закрывается клиентом или сервером, параметр Action содержит TERMINATE.

Любые значения, возвращаемые пользовательской функцией, игнорируются.

nLinkType

Specifies the link type in the following way:

nLinkType Link type

0

Ручная

1

С уведомлением

2

Автоматическая

Можно отменить выдачу уведомлений из приложения-сервера, задав 0 в качестве nLinkType. При изменении элемента функция, определенная пользователем, выполняться не будет.

Expand imageВозвращаемое значение

Logical

Expand imageПримечания

Функция DDEAdvise( ) используется для создания связи с уведомлением или автоматической связи с данным элементом в приложении-сервере. Когда DDEAdvise( )создает связь с уведомлением, приложение-сервер будет уведомлять Visual FoxPro об изменении элемента с данным именем. Если создается автоматическая связь, приложение-сервер уведомляет Visual FoxPro об изменении элемента и передает в Visual FoxPro новые данные.

Чтобы создать связь, предварительно необходимо с помощью функции DDEInitiate( ) установить канал с приложением-сервером.

Функцию DDEAdvise( ) можно также использовать для отмены выдачи уведомлений из сервера.

DDEAdvise( ) возвращает значение "истина" (.T.) в случае успешного выполнения; в противном случае возвращается "ложь" (.F.).

Expand imageПример

Следующий пример демонстрирует установку канала DDE с электронной таблицей Sheet1 Microsoft Excel. Функции DDEAdvise( ) устанавливают две связи с содержимым двух ячеек электронной таблицы (R1C1 и R1C2). При изменении данных в какой-либо из этих двух ячеек выполняется пользовательская функция NEWDATA. Она тестирует параметры item и advise, чтобы определить, какой именно элемент изменился и какого рода связь была установлена.

  CopyCode imageCopy Code
PUBLIC mchannum
mchannum = DDEInitiate('Excel', 'Sheet1')
IF mchannum != -1
   = DDEAdvise(mchannum, 'R1C1', 'newdata', 1)     && Notify link
   = DDEAdvise(mchannum, 'R1C2', 'newdata', 2)     && Automatic link
   WAIT WINDOW 'Enter data in first two cells in Excel.'
ENDIF
PROCEDURE newdata
PARAMETERS channel, action, item, data, format, advise
IF action = 'ADVISE'
   DO CASE
      CASE item = 'R1C1'   && Notify link
         newvalue = DDERequest(channel, item)
         ? 'R1C1 notify link: ' + newvalue
      CASE item = 'R1C2'   && Automatic link
         newvalue = data
         ? 'R1C2 automatic link: ' + newvalue
   ENDCASE
ELSE
   IF action != "TERMINATE"
      = DDETerminate(mchannum)
 ENDIF
ENDIF

Expand imageСмотри также