Создает или освобождает имя темы для данной службы в процессе связи динамического обмена данными (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, запрос клиента на связь с уведомлением или автоматическую связь отвергается.
Возвращаемое значение
Logical
Примечания
После того как имя темы создано, при любом запросе клиента к этому имени Visual FoxPro выполняет пользовательскую функцию cUDFName. Этой функции передается набор параметров, значения которых определяются запросом клиента. Значение, возвращаемое пользовательской функцией, передается клиенту с помощью DDEPoke( ). Возвращаемое значение представляет собой логическое выражение, которое показывает, в состоянии ли данная тема предоставить услуги, запрошенные клиентом.
Функция DDESetTopic( ) возвращает значение "истина" (.T.), если она успешно создает или освобождает имя темы. Или возвращает "ложь" (.F). если название темы не может быть создано или освобождено. Пользуйтесь функцией DDELastError( ), чтобы определить причину неудачи при создании или освобождении имени темы.
Пример
В следующем примере создается простейшая среда сервера myserver
, которая поддерживает выполнение команд Visual FoxPro из приложения-клиента. Приложение-клиент делает запросы к серверу myserver
ерез * тему DO, и для выполнения команды клиента используется макроподстановка.
Copy 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:
Copy Code | |
---|---|
gnMyChan = INITIATE("myserver","DO") =EXECUTE(MyChan,"WAIT WINDOW 'Hi, this is EXCEL speaking'") =RETURN( ) |
Смотри также
Справочное руководство
Функция DDEEnabled( )Функция DDELastError( )
Функция DDEPoke( )
Функция DDESetService( )
Прочие ресурсы
ФункцииСправочное руководство по языку (Visual FoxPro)