Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 6:

Обмен данными

OLE

При реализации обмена данными приложений данные/наборы данных могут представлять собой связанные или внедрeнные объекты. Связывание (Link) используется, если нужно, чтобы при изменении данных в исходном файле данные в другом файле также изменялись. Внедрение используется, если нужно использовать конечный файл (на другом компьютере) и нежелательно изменение данных в нeм при изменении исходных данных

Связанный объект - это объект, созданный в одном файле и вставленный в другой файл с поддержкой связи между файлами; связанный объект не является частью файла, в который он вставлен. При обновлении исходного файла связанный объект автоматически обновляется.

Внедрeнный объект является частью файла, в который он вставлен. При двойном щелчке на связанном объекте он открывается в приложении, в котором он был создан; при двойном щелчке на внедрeнном объекте появляется возможность редактирования его средствами текущего приложения.

Элемент управления OLE

Элемент управления OLE (панель элементов управления) используется для связывания /внедрения объектов в приложениях Visual Basic. Контекстное меню OLE содержит команды:

  • вырезать, копировать, вставить, удалить,
  • перенести
  • вставить объект (имеется список объектов для выбора и возможность выбора типа вставки),
  • специальная вставка - при выборе этой команды выводится диалоговое окно, где отображаются имеющиеся в наличии классы объектов. Имеется возможность сделать выбор - связь/внедрение; имеется возможность использования вместо объекта пиктограммы,
  • создать связь, создать внедренный объект.

Не все команды отображаются или являются доступными; это зависит от состояния приложения и буфера обмена. Некоторые параметры элемента управления OLE даны в табл. 6.1.

Таблица 6.1. Некоторые свойства, методы и события элемента управления OLE
Свойства Пояснения
Action Выполняемое действие. Недоступно во время разработки, возможны установочные значения в пределах 0 - 18; среди них: 0 - создаeт внедрeнный объект, 1 - создаeт связанный объект, 7 - открывает объект, 15 - отображает окно Специальная вставка, 18 - сохраняет OLE и т.д. Некоторые действия Action реализованы как методы
AutoActivate Определяет когда активизируется объект (после двойного щелчка, после получения фокуса и т.д.)
AutoVerbMenu Должно ли выводиться контекстное меню
Class Идентифицирует приложение, которое создаeт OLE-объект (например, Word)
HostName Содержит имя приложения, создавшего объект
ObjectVerbs Список команд, применимых к OLE-объекту
ObjectVerbsCount Количество таких команд (см. выше)
OLEType Возвращает состояние OLE-объекта в контейнере: связанный/внедрeнный
OLETypeAllowed Задание связывания, внедрения или обоих
SizeMode Возвращает и задаeт режим согласования размеров элемента управления OLE и загружаемого в него объекта
SourceDoc Имя файла, где находится объект (или который должен быть загружен в OLE-контейнер)
SourceItem Указывает на данные объекта, которые будут связаны
Verb Определяет вид действия, которое будет выполнено при активизации объекта с помощью свойства Action
UpdateOptions Когда содержимое объекта OLE может быть обновлено
Методы
Close Закрыть объект, завершить связывание с приложением, где он был создан
Copy Копирование из контейнера OLE в буфер обмена
CreateEmbed Внедрение объекта в OLE-контейнер. CreateEmbed (Action = 0) создает внедренный объект, CreateLink (Action = 1) создает cвязанный объект
CreateLink Создание связываемого объекта, пользуясь содержимым заданного файла
Delete Удалить объект
DoVerb Открыть объект для выполнения над ним одного из действий
Paste Вставить объект в OLE-контейнер из буфера обмена
Updаte Обновление объекта в OLE-контейнере (на основании данных приложения, посредством которого объект редактируется)
События
ObjectMove Происходит после изменений размеров или перемещения объекта, бывшего в OLE-контейнере
Updated Происходит после изменения данных в объекте

Приложение OLE-сервер определяет множество операций (команд), которые могут выполняться над поставляемым им объектом. Каждый объект поддерживает собственный набор команд. Этот набор может изменяться во время работы приложения. OLE-объект получает список команд от приложения-сервера и доступ к этому списку команд осуществляет через свои свойства ( AutoVerbMenu, Verb, ObjectVerbs, ObjectVerbsCount ). Эти свойства доступны во время выполнения.

Практическая работа 41. OLE

41а. Элементарная операция OLE

Последовательность действий:

  • Создать на форме элемент управления OLE для создания, например, связанного объекта,
  • создать соответствующий файл, например, A:\ole1.xls (см. код, данный ниже),
  • ввести код, данный ниже,
  • стартовать проект, сделать щелчок на форме, наблюдать результат.
Private Sub Form_Click()
OLE1.Class = "Worksheet" ' приложение Excel
OLE1.SourceDoc = "A:\ole1.xls" ' имя файла
' использовать указанный блок данных
OLE1.SourceItem = "A1A3:B1B3" 
OLE1.Action = 1 ' создать связанный объект
End Sub

41в. OLE

Рассматривается загрузка объектов (см. процедуру Form_Load () в OLE-контейнер и реализация (по желанию пользователя) связывания/внедрения (см. процедуру Public Sub LinkEmb(FileName As String, Embed As Boolean) ). Последовательность действий:

  1. создать объекты: текстовый файл (приложение Word), таблицу (приложение Excel), базу данных (приложение Access), рисунок (приложение Paint),
  2. создать на форме элемент управления OLE (Name = ole1), два переключателя (Name = opt1 и opt2 соответственно, Caption = Link и Embed cоответственно), командную кнопку (Name = cmd1, Caption = Load Object), поле списка (Name = lst), табл. 6.1.
  3. ввести код данный ниже, стартовать проект,
  4. маркировать в поле списка lst, элемент, например, "Docum.Word", сделать щелчок на требуемом переключателе (Link или Embedding), затем сделать щелчок на командной кнопке "Load Object". В поле элемента OLE выводится соответствующий файл,
  5. сделать двойной щелчок в поле OLE на введeнном объекте.

В зависимости от того, какой переключатель использован (Link или Embed), вставленный объект выводится или в приложении Word для редактирования, или появляется возможность редактировать его средствами того приложения, в котором он находится. В случае Link внесeнные (пользователем) изменения остаются в исходном файле. Это можно проверить, загрузив файл в приложение Word.

' создать список объектов для загрузки в OLE-контейнер
Private Sub Form_Load()
With lst
.AddItem ("Docum.Word")
.AddItem ("Table.Excel")
.AddItem ("Picture.Paint")
.AddItem ("Database.Access")
End With
End Sub
' выбор загружаемого объекта (маркировать его в списке, см.:
' Select Case lst.ListIndex) и определение режима 
' связывание/внедрение с учётом состояния переключателей 
Private Sub cmd1_Click()
Select Case lst.ListIndex
Case 0: LinkEmb "A:\nin.doc", opt1.Value
Case 1: LinkEmb "A:\nin.xls", opt1.Value
Case 2: LinkEmb "A:\nin.bmp", opt1.Value
Case 3: LinkEmb "A:\nin.mdb", opt1.Value
End Select
End Sub
' в зависимости от значений переданных аргументов
'реализовать связь/внедрение
Public Sub LinkEmb(FileName As String, Embed As Boolean)
If Embed Then
ole1.CreateEmbed FileName
Else
ole1.CreateLink FileName
End If
End Sub
Константин Новков
Константин Новков
Как подключить библиотеку DLL ?
антонина квасова
антонина квасова
Что реализует инструкция Open - Open "a:\t.txt" For Output As #1
Евгений Рябов
Евгений Рябов
Россия, Саранск