Современные программные средства Часть 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”)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.