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

DDESetTopic(cServiceName, cTopicName [, cUDFName])

Параметры

cServiceName

Задает имя службы. Новые имена служб можно задать функцией DDESetService( ).

cTopicName

Задает имя темы, которое предстоит создать или освободить. Если используется аргумент cUDFName, функция DDESetTopic( ) создает имя темы cTopicName. Если аргумент cUDFName опущен, имя темы cTopicNameосвобождается. Если cTopicName - пустая строка, то для любого имени темы, не объявленного явно, будет выполняться пользовательская функция, заданная аргументом cUDFName.

cUDFName

Задает имя определенной пользователем функции, которая должна выполняться каждый раз, когда приложение-клиент делает запрос к данному имени темы. Если имя cUDFName опущено, имя темы cTopicName освобождается для данной службы.

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

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

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

Номер канала клиента.

Action (действие)

ADVISE, EXECUTE, INITIATE, POKE, REQUEST, или TERMINATE.

Item (элемент)

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

Data (данные)

Данные от клиента.

Format (формат)

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

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

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

Значения параметров Item, Data и Advise Status зависят от параметра Action. The following table lists the Action parameter values and the values contained in the Item, Data, and Advise Status parameters. A dash (–) indicates that the parameter value is the empty string.

Значение Action Значение Item Значение Data Значение Advise Status

INITIATE

Имя темы

TERMINATE

POKE

Имя элемента

Новые данные

REQUEST

Имя элемента

EXECUTE

Новая команда

ADVISE

Имя элемента

Тип связи

Если функция, определенная пользователем, успешно обрабатывает запрос клиента, эта функция должна возвратить значение "истина" (.T.). Если запрос не может быть обработан или произошла ошибка, пользовательская функция должна возвратить "ложь" (.F.). Если "ложь" возвращается, когда значением параметра Action является INITIATE, запрос клиента к имени темы отвергается. Если "ложь" возвращается, когда значением Action является POKE, REQUEST или EXECUTE, запрос игнорируется. Если "ложь" возвращается, когда значением Action является ADVISE, запрос клиента на связь с уведомлением или автоматическую связь отвергается.

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

Logical

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

После того как имя темы создано, при любом запросе клиента к этому имени Visual FoxPro выполняет пользовательскую функцию cUDFName. Этой функции передается набор параметров, значения которых определяются запросом клиента. Значение, возвращаемое пользовательской функцией, передается клиенту с помощью DDEPoke( ). Возвращаемое значение представляет собой логическое выражение, которое показывает, в состоянии ли данная тема предоставить услуги, запрошенные клиентом.

Функция DDESetTopic( ) возвращает значение "истина" (.T.), если она успешно создает или освобождает имя темы. Или возвращает "ложь" (.F). если название темы не может быть создано или освобождено. Пользуйтесь функцией DDELastError( ), чтобы определить причину неудачи при создании или освобождении имени темы.

Expand imageПример

В следующем примере создается простейшая среда сервера myserver, которая поддерживает выполнение команд Visual FoxPro из приложения-клиента. Приложение-клиент делает запросы к серверу myserver ерез * тему DO, и для выполнения команды клиента используется макроподстановка.

  CopyCode imageCopy Code
*** Set Visual FoxPro up as a DDE server ***
= DDESetService('myserver', 'DEFINE')
= DDESetService('myserver', 'EXECUTE', .T.)
= DDESetTopic('myserver', 'DO', 'DOTOPIC')
WAIT WINDOW 'Server portion service setup ... ' NOWAIT
*** Use Visual FoxPro as a DDE client ***
gnChannel = DDEInitiate('myserver','DO')
=DDEExecute(gnChannel, 'WAIT WINDOW "Command Executed ... "')
=DDETerminate(gnChannel)
PROCEDURE dotopic
PARAMETERS gnChannel, gcAction, gcItem, gData, gcFormat, gnAdvise
glResult = .F.
*** It's necessary to return .T. from an   ***
*** INITIATE action or no connection is made ***
IF gcAction = 'INITIATE'
   glResult = .T.
ENDIF
IF gcAction = 'EXECUTE'
   &gData
   glResult = .T.
ENDIF
IF gcAction = 'TERMINATE'
   WAIT WINDOW 'Goodbye ... ' NOWAIT
   glResult = .T.
ENDIF
RETURN glResult

После того как эта программа будет выполнена, вы будете иметь готовую службу Visual FoxPro, к которой могут обращаться другие приложения. Если у вас есть Microsoft Excel, можно запустить следующую макрокоманду Excel:

  CopyCode imageCopy Code
gnMyChan = INITIATE("myserver","DO")
=EXECUTE(MyChan,"WAIT WINDOW 'Hi, this is EXCEL speaking'")
=RETURN( )

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