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

Служебные имена dde-серверов

Служба

Приложение

"Excel"

Microsoft Excel

"FoxPro"

Visual FoxPro

"MSAccess"

Microsoft Access

"Project"

Microsoft Project

"WinWord"

Microsoft Word

cTopicName – имя темы (предмета связи). Имя темы должно быть известно приложению. Большинство DDE-серверов предоставляют тему с именем "System".

Служба и предоставляемые ей темы приводятся в документации, прилагаемой к приложению.

После установления канала обмена данными с DDE-сервером VFP, выступая как клиент, может запрашивать данные сервера посредством соответствующих функций.

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

Run /n C:\Program Files\Microsoft Office\Office10\Excel

Если оно закрыто, то VFP осведомится, нужно ли открыть приложение, и при положительном ответе попытается это сделать.

Пример. Устанавливается DDE-канал между VFP и Microsoft Excel. Используется тема System.

Run /n C:\Program Files\Microsoft Office\Office10\Excel

nChannelNumber = DDEInitiate('Excel', 'System')

if nChannelNumber != –1 then

&& Выполняются операции клиента

&& …

&& После их завершения канал закрывается

DDETerminate(nChannelNumber)

endif

Функция

DDETerminate(nChannelNumber | cServiceName)

закрывает DDE-канал, установленный DDEInitiate( ).

Возвращает .T., если канал удалось закрыть, или .F. – в противном случае.

Параметры:

nChannelNumber – номер закрываемого канала.

cServiceName – служба DDE-сервера.

Каналы после завершения обмена данными следует закрывать, экономя системные ресурсы. Все открытые каналы автоматически закрываются при завершении работы с VFP.

Функция

DDEAdvise(nChannelNumber, cItemName, cUDFName, nLinkType)

устанавливает вид связи DDE-канала nChannelNumber: с уведомлением, без него или автоматическая связь.

Возвращает .T., если вид связи установлен, или .F. – в противном случае.

Параметры:

cItemName – имя элемента. Например, имя "R1C1" при работе с Microsoft Excel означает ячейку в первом столбце и первой строке рабочего листа.

cUDFName – строка, содержащая имя пользовательской процедуры, которая выполняется, если установлена связь с уведомлением или автоматическая, при изменении элемента cItemName.

Когда процедура выполняется, она получает 6 описанных в табл. 17.3 параметров; та же таблица отображает и порядок их следования.

Таблица 17.3

Параметры, передаваемые процедуры, заданной cUdfName

Параметр

Описание

nChannelNumber

Номер DDE-канала

Action

Действие: ADVISE или TERMINATE.

Item

Имя элемента, например "R1C1" для ячейки листа Microsoft Excel

Data

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

Format

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

AdviseStatus

Тип связи (0, 1 или 2)

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

В случае связи с уведомлением новые данные должны быть получены DDERequest( ); при автоматической связи они содержатся в параметре Data.

Параметр Action равен 'ADVISE', когда связь обновляется сервером, и содержит 'TERMINATE', когда связь прерывается клиентом или сервером.

nLinkType – тип связи; принимает следующие значения:

  • 0 – связь без уведомления;

  • 1 – связь с уведомлением;

  • 2 – автоматическая связь.

Если для nLinkType указан 0, то при изменении элемента пользовательская процедура, заданная параметром cUDFName, не выполняется.

Разница между видами связи 1 и 2 в том, что в первом случае для Data возвращается пустая строка, а во втором – строка с новыми данными. В обоих случаях при изменении элемента cItemName пользовательская процедура выполняется.

Пример (приводится в справке VFP). Устанавливается связь с двумя ячейками листа Microsoft Excel. Вид связи с ячейкой 'R1C1' – 1, в ячейкой 'R1C2' – 2. При обновлении данных в ячейках выполняется пользовательская процедура GetAdvise( ). Полученные от Microsoft Excel данные отображаются в окне VFP.

Run /n C:\Program Files\Microsoft Office\Office10\Excel

nChannelNumber = DDEInitiate('Excel', 'Лист1')

if nChannelNumber != –1 then

DDEAdvise(nChannelNumber, 'R1C1', "GetAdvise", 1)

DDEAdvise(nChannelNumber, 'R1C2', "GetAdvise", 2)

wait window 'Введите данные в первые две ячейки строки 1 Microsoft Excel'

endif

procedure GetAdvise

parameters nChannelNumber, action, item, data, format, advise

if action = 'ADVISE' then

do case

case item = 'R1C1'

&& Связь с уведомлением; для получения данных выполняем DDERequest( )

newValue = DDERequest(nChannelNumber, item)

? 'R1C1 – связь с уведомлением: ' + newValue

case item = 'R1C2'

&& Автоматическая связь

newValue = data

? 'R1C2 - автоматическая связь: ' + newValue

endCase

else

DDETerminate(nChannelNumber)

endif

endProc

Замечание. В нерусифицированном Microsoft Excel в DDEInitiate( ) вместо 'Лист1' следует употребить 'Sheet1'.

Функция

DDEEnabled([lExpression1 | nChannelNumber [, lExpression2]])

изменяет или возвращает статус (активный или не активный) DDE-процесса.

Возвращает при выполнении без параметров .T., если DDE-процесс глобально активен, или .F. – в противном случае.

Параметры:

lExpression1 – задает глобально (для всех DDE-каналов) статус DDE-процесса; .T. – активный; .F. – не активный. Возвращает .T. при удачном завершении или .F. – в противном случае.

nChannelNumber – номер DDE-канала. Возвращает .T., если DDE-процесс для указанного канала активен, или .F. – в противном случае.

lExpression2 – задает статус DDE-процесса для канала nChannelNumber.

Когда DDE-процесс неактивен, то запросы клиента становятся в очередь до тех пор, пока процесс не будет активизирован.

Функция

DDESetService(cServiceName, cOption [, cDataFormat | lExpression])

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

Результат имеет логический тип. Функция, если действие выполнено, возвращает .T., или F. – в противном случае.

Параметры:

cServiceName – служба, которая создается, освобождается или изменяется или информация о которой возвращается. Имя службы VFP по умолчанию – "FoxPro".

cOption – строка, задающая выполняемое функцией DDESetService( ) действие. Принимает приведенные в табл. 17.4 значения.

Таблица 17.4

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