Функция DDEAdvise( )

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

Синтаксис:

DDEAdvise(nChannelNumber, cItemName, cUDFName, nLinkType)

Параметры:
nChannelNumber
Задает номер канала.
cItemName
Задает номер элемента. Например, Microsoft Excel ссылается на ячейки электронной таблицы, используя систему обозначений в виде номеров строк и столбцов. Имя элемента R1C1 определяет ячейку в первой строке и первом столбце электронной таблицы.
cUDFName
Задает пользовательскую функцию, которая выполняется в том случае, когда устанавливается связь с уведомлением или автоматическая связь и изменяется элемент cItemName. Когда пользовательская функция выполняется, ей передаются следующие шесть параметров в указанном порядке:

  1. Channel Number (номер канала) - Номер канала приложения-сервера
  2. Action (действие) - ADVISE или TERMINATE
  3. Item (элемент) - Имя элемента; например, R1C1 в случае ячейки электронной таблицы Microsoft Excel
  4. Data (данные) - Новые данные (автоматическая связь) или пустая строка (связь с уведомлением)
  5. Format (формат) - Формат данных, например CF_TEXT
  6. Advise Status (статус уведомления) - Тип связи (0 = ручная, 1 = с уведомлением, 2 = автоматическая)

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

nLinkType		Тип связи
0		Ручная
1		С уведомлением
2		Автоматическая

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

Результат:
Логический

Комментарии:
Допустима только в Visual FoxPro и FoxPro для Windows.
Функция DDEAdvise( ) используется для создания связи с уведомлением или автоматической связи с данным элементом в приложении-сервере. Когда DDEAdvise( ) создает связь с уведомлением, приложение-сервер будет уведомлять Visual FoxPro об изменении элемента с данным именем. Если создается автоматическая связь, приложение-сервер уведомляет Visual FoxPro об изменении элемента и передает в Visual FoxPro новые данные.
Чтобы создать связь, предварительно необходимо с помощью функции DDEInitiate( ) установить канал с приложением-сервером.
Функцию DDEAdvise( ) можно также использовать для отмены выдачи уведомлений из сервера.
DDEAdvise( ) возвращает значение "истина" (.T.) в случае успешного выполнения; в противном случае возвращается "ложь" (.F.).

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

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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 01.01.2003