Функция DDESetTopic( )

Создает или освобождает имя темы для данной службы в процессе связи динамического обмена данными (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. В следующей таблице перечислены значения параметра Action и значения, содержащиеся в параметрах Item, Data и Advise Status. Тире (-) означает, что значением параметра является пустая строка.

Значение Action	Значение Item	Значение Data	Значение Advise Status
INITIATE		-		Имя темы		-
TERMINATE		-		-		-
POKE		Имя элемента	Новые данные	-
REQUEST		Имя элемента	-		-
EXECUTE		-		Новая команда	-
ADVISE		Имя элемента	-		Тип связи

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

Результат:
Символьный

Комментарии:
Допустима только в Visual FoxPro и FoxPro для Windows.
После того как имя темы создано, при любом запросе клиента к этому имени Visual FoxPro выполняет пользовательскую функцию cUDFName. Этой функции передается набор из шести параметров, значения которых определяются запросом клиента. Значение, возвращаемое пользовательской функцией, передается клиенту с помощью DDEPoke( ); оно представляет собой логическое выражение, которое показывает, в состоянии ли данная тема предоставить услуги, запрошенные клиентом.
Функция DDESetTopic( ) возвращает значение "истина" (.T.), если она успешно создает или освобождает имя темы; в противном случае она возвращает "ложь" (.F.). Пользуйтесь функцией DDELastError( ), чтобы определить причину неудачи в создании или освобождении имени темы.

Пример:

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

*** 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:
gnMyChan = INITIATE("myserver","DO")
=EXECUTE(MyChan,"WAIT WINDOW 'Hi, this is EXCEL speaking'")
=RETURN( )

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