Передача данных по технологии DDE

Страницы работы

2 страницы (Word-файл)

Содержание работы

Современные программные средства  Часть 3

Тема  Передача данных между приложениями Windows

Лекция 1  Передача данных по технологии DDE

DDE - Dinamic  Data Exchenge организует межпрограммные коммуникации для передачи данных. Старый стандарт. Может передавать текст и числа. Некоторые программы могут передавать графику.

В коммуникации участвуют две программы: сервер, клиент, между которыми устанавливается канал связи. Установка канала требует задания трех элементов информации: программы, темы и элемента (зависят от программы).

Программа - имя программы-сервера. Должны быть зарегистрированы в Windows. Имена программ:

Программа

Регистрационное имя

Word for windows

WinWord

Excel

Excel

Project

Project

Access

MSAccess

FoxPro

FoxPro

Windows Program Manager

ProgMan

MachCad

MCad

Visual Basic for windows

имя_программы (без EXE)

Тема - это имя документа, с которым будет вестись работа (Excel - имя таблицы, VB - имя формы, Word - имя документа)

Элемент - точка связи (область темы) с которой будет производиться обмен данными  (Excel - область ячеек, VB - элемент управления на форме, Word - закладка, либо селектор типа \StartOfDoc).

Список всех возможных тем и элементов - в документации к программе.

Открытие канала DDE

Программа-сервер ДОЛЖНА БЫТЬ ЗАПУЩЕНА.  Далее - используется метод:

канал = DDEInitiate (программа, тема)

метод возвращает номер открытого канала.

Закрытие канала DDE

DDETerminate (канал)

Получение информации от сервера:

               переменная = DDERequest (канал, элемент)

Пример: В Word создать документ с закладкой BookMark1. В качестве закладки выделить текст: “Это данные для передачи в Excel !!”

Option Explicit

               Dim ChannelNum As Integer

               DimResult

‘Установка связи с Word

Sub OpenChannel ()

               ChannelNum = DDEInitiate(“WinWord”, “D:\CPC\DDECONNECT.DOC”)

               DialogSheets(“DDEDIALOG”).EditBoxes(“DDEChannelBox”).Text = ChannelNum

EndSub

‘Получение данных

SubGetData ()

Result = DDERequest(ChannelNum, “BookMark1”)

‘в некоторых версиях - DDERequest$()

DialogSheets(“DDEDIALOG”).EditBoxes(“DDEDataBox”).Text = Result

End Sub

‘Закрытие связи

Sub CloseChannel ()

               DDETerminate (ChannelNum)

EndSub

Макет диалогового окна может быть любой (привести пример диалогового окна)

Следующий пример во-первых, проверяет запущен ли  Microsoft Excel, затем открывает канал с Microsoft Excel по теме System и использует DDERequest$() для получения названия загруженного файла.:

If AppIsRunning("Microsoft Excel") = 0 Then

               Shell "C:\EXCEL\EXCEL.EXE"

               AppActivate "Microsoft Word", 1

End If

channel = DDEInitiate("Excel", "System")

topics$ = DDERequest$(channel, "Topics")

If InStr(topics$, "Лист1") <> 0 Then

MsgBox "Лист1 доступен для работы."

End If

DDETerminate channel

Передача информации серверу

               DDEPoke  канал, элемент, данные

данные - это область, обладающая свойствами  DDE

‘Пересылка данных

Sub PokeChannel ()

Sheets(“Лист1”).Cells(1,1).Value = DialogSheets(“DDEDIALOG”)._

 EditBoxes(“DDEDataBox”).Text

Set Result = Sheets(“Лист1”).Cells(1,1)

Application.DDEPoke ChannelNum, “BookMark1”, Result

End Sub

Передача директив серверу

Директивы передаются серверу на командном языке сервера (той программы, с которой поддерживается канал

DDEExecute (канал, командная строка)

‘Процедура запуска предварительного просмотра в Word

SubPreviewIt ()

‘Квадратные скобки обязательны, они обозначают, что имеется  деректива, а не текст

DDEExecute ChannelNum, “[FilePrintPreview]”

End Sub

Можно использовать одну инструкцию DDEExecute для выполнения более, чем одной команды. Пример выполняет в Microsoft Excel открытие и закрытие листа:

DDEExecute channel, "[NEW(1)][FILE.CLOSE(0)]"

Многие команды требуют наличие кавычек в командной строке. Приходится использовать Chr$(34):

DDEExecute channel, "[OPEN(" + Chr$(34) + "SALES.XLS" + Chr$(34) + ")]"

Еще пример:

If AppIsRunning("Microsoft Excel") = 0 Then Shell "C:\EXCEL\EXCEL.EXE"

channel = DDEInitiate("Excel", "System")

q$ = Chr$(34)

cmd1$ = "[OPEN(" + q$ + "C:\EXCEL\EXAMPLES\SALES.XLS" + q$ + ")]"

cmd2$ = "[SELECT(" + q$ + " R4C2" + q$ + ", " + q$ + " R4C2" + q$ + ")]"

bothcmds$ = cmd1$ + cmd2$

DDEExecute channel, bothcmds$

Работа с MachCad

В MachCad запишите:

a := 4       b := Г(a)                  b =

В Excel составьте программу:

‘Расчет гамма-функции

Sub Gamma ()

Option Explicit

               Dim ChannelNum As Integer

               DimResult

‘Установка связи с MachCad

ChannelNum = DDEInitiate(“MCad”, “C:\CPC\DDE1.MCD”)

‘Отправить в переменную  а  число  5

Sheets(“Лист1”).Cells(1,1).Value = 5

Set Result = Sheets(“Лист1”).Cells(1,1)

Application.DDEPoke ChannelNum, “a”, Result

‘Получить результат вычисления Гамма-функции из MachCad

Result = DDERequest(ChannelNum, “b”)

DialogSheets(“DDEDIALOG”).EditBoxes(“DDEDataBox”).Text = Result

‘Закрытие связи

               DDETerminate (ChannelNum)

End Sub

Пересылка через MachCad массива:

2

a :=      3        b := | a |   b =

4       

Set Result = Sheets(“Лист1”).Range(“A1:A3”)

Похожие материалы

Информация о работе