Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Параметр Action и соответствующие значения параметров Item, Data и AdviseStatus

Action

Item

Data

AdviseStatus

"INITIATE"

Пустая строка

Имя темы

Пустая строка

"TERMINATE"

"

Пустая строка

"

"POKE"

Имя элемента

Новые данные

"

"REQUEST"

"

Пустая строка

"

"EXECUTE"

Пустая строка

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

"

"ADVISE"

Имя элемента

Пустая строка

Тип соединения

Если пользовательская cUDFName-функция успешно обрабатывает запрос клиента, то она должна возвращать .T., или .F. – в противном случае. Если функция возвращает .F., если Action это:

  • INITIATE, то тема отвергается;

  • POKE, REQUEST или EXECUTE, то запрос игнорируется;

  • ADVISE, то связь с уведомлением или автоматическая связь не выполняется.

После создания темы каждый запрос клиента к теме приводит к выполнению cUDFName-функции. Результат функции (.T. или .F.) передается клиенту посредством DDEPoke( ). Причину неудачи вернет функция DDELastError( ).

Пример (приводится в справке VFP). В качестве сервера употребляется VFP. Создается служба myService и тема DO, через которую клиент связывается со службой. В частности, в примере клиент передает следующую команду:

wait window "Команда выполнена"

При выполнении команды клиента используется макроподстановка.

&& VFP используется и как DDE-сервер и как DDE-клиент

&& Определяем новую службу и ее установки

DDESetService('myService', 'DEFINE')

DDESetService('myService', 'EXECUTE', .T.)

DDESetTopic('myService', 'DO', 'DOTopic')

&& Устанавливаем DDE-канал

gnChannel = DDEInitiate('myService', 'DO')

DDEExecute(gnChannel, 'wait window "Команда выполнена"')

DDETerminate(gnChannel)

function DOTopic

parameters gnChannel, gcAction, gcItem, gData, gcFormat, gnAdvise

glResult = .F.

&& Необходимо вернуть .T., когда Action – это 'INITIATE';

&& в противном случае DDE-канал не будет установлен

do case

case gcAction = 'INITIATE'

glResult = .T.

case gcAction = 'EXECUTE'

&gData && Применяем макроподстановку

glResult = .T.

case gcAction = 'TERMINATE'

wait window 'Сеанс завершен' nowait

glResult = .T.

endcase

return glResult

endFunc

После выполнения этой программы будет установлена DDE-служба VFP, которая доступна другим приложениям.

Функция

DDESetOption(cOption [, nTimeoutValue | lExpression])

изменяет или возвращает настройки DDE.

Возвращает текущее значение TIMEOUT или SAFETY.

Параметры:

cOption – задает вид настройки. Принимает приведенные в табл. 17.6 значения.

Таблица 17.6

Значения параметра cOption

cOption

Параметр

Описание

"TIMEOUT"

nTimeoutValue

Число миллисекунд, в течение которых DDE-функции ожидают ответ сервера; значение по умолчанию – 2000

"SAFETY"

lExpression

Если приложение-сервер не отвечает, то при выполнении DDEInitiate( ) диалог с вопросом, нужно ли установлении DDE-канал, будет появляться, когда настройка SAFETY – это .T. (по умолчанию), и не будет – в противном случае

nTimeoutValue – значение настройки TIMEOUT.

lExpression – значение настройки SAFETY.

Функция

DDEExecute(nChannelNumber, cCommand [, cUDFName])

посылает серверу команду клиента по DDE-каналу nChannelNumber.

Функция, если опущен параметр cUDFName, возвращает .T., если сервер успешно выполнил команду, или .F. – в противном случае. Причиной неудачи может также быть и неверное указание канала. Если параметр cUDFName задан, то возвращается номер транзакции (нуль или положительное число), а в случае ошибки – число –1.

Параметры:

cCommand – строка, содержащая команду, посылаемую другому приложению. Формат команды определяется приложением, ее получающим.

cUDFName – строка, задающая имя пользовательской функции, позволяющей асинхронный обмен данными. Если параметр опущен, то клиент (VFP) ожидает данные сервера в течение периода, заданного по умолчанию или DDESetOption( ). Если параметр задан, то VFP продолжает выполнение программы сразу после выполнения запроса.

Когда сервер завершает выполнение посланной ему команды, cUDFName-функция исполняется. Всего такая функция должна иметь 6 перечисленных в табл. 17.7 параметров; порядок следования параметров в функции совпадает с указанным в табл. порядком.

Таблица 17.7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]