Visual Basic 6. Руководство разработчика

       

Встраивание и связывание объектов во время разработки


В этом параграфе рассмотрено создание простого элемента управления OLE Container для демонстрации встраивания объектов во время проектирования. Встраивание во время разработки следует использовать тогда, если заранее извест­но, какие объекты понадобятся, или требуется ограничить пользователей приложе­ния использованием только определенных объектов (например, документов Word). Этот метод позволяет выполнять и связывание объектов, но во время проектиро­вания предпочтительнее организовывать встраивание. Встраивание объекта можно выполнить двумя способами:

•  путем вставки существующего объекта методом "перетащить-и-опустить";

•  путем вставки объекта с помощью диалогового окна

Insert Object (Вставка объекта).

Встраивание методом "перетащить-и-опустить"

Чтобы внедрить объект с помощью этого способа, необходимо выполнить следующие действия.

1. Открыть в Visual Basic новый проект и выполнить двойной щелчок на значке элемента OLE Container в панели элементов управления, чтобы поместить его экземпляр на форму. Visual Basic отобразит диалоговое окно Insert Object (Вставка объекта), в котором можно указать объект, внедряемый в элемент OLE Container.

2. В диалоговом окне Insert Object (Вставка объекта) (см. рис. 14.2) щелкните на кнопке Cancel. (Это означает, что в форму будет помещен пустой элемент управления OLE Container, и позднее можно будет перетащить туда OLE-объект).

3. В окне Properties (Свойства) элемента OLE Container необходимо задать значение свойства SizeMode равным 1 — Stretch (если объект — рисунок, размеры которого можно изменять) или 2 — AutoSize (если объект — текст или рисунок, размеры которого изменять не следует).

Возможные значения свойства SizeMode приведены в табл. 14.1.

Таблица 14.1. Значения свойства SizeMode

Значение

Описание

Clip

Stretch

AutoSize

Zoom

Размеры отображаемого объекта равны исходным. Если его размеры превышают размеры окна элемента управления OLE Container, то часть изображения отсекается

Размеры изображения объекта подгоняются под размер окна элемента управления OLE Container. При этом изображение может исказиться

Размеры окна элемента управления изменяются автоматически, чтобы объект целиком поместился в окно

Размеры объекта изменяются так, чтобы он занял максимально возможную часть окна элемента управления OLE Container, сохранив при этом свои первоначальные пропорции

<
4. Запустите приложение, которое поддерживает OLE, и откроите файл. В нашем примере документ Word встраивается в элемент управления OLE Container с помощью перетаскивания документа из приложения-источника (Word) на пустой элемент OLE Container.

5. Когда на экране появятся окна запущенных Visual Basic и Word, перетащите документ (или его часть) в пустой элемент управления OLE Container.

Совет

Чтобы в окно элемента управления OLE Container поместить часть документа Word, нужно выделить часть документа, а затем перетащить ее, нажав левую кнопку мыши в любом месте выделенной части. Если окно Visual Basic в данный момент невидимо, то для перехода в него нажмите клавиши Alt+Tab, не отпуская кнопку мыши. При появлении на рабочем столе формы Visual Basic перетащите выделенную часть доку­мента в окно элемента управления OLE Container. Выделенный текст будет удален из исходного объекта (документа Word). Чтобы встроить копию выделенного текста (текст в исходном документе сохраняется), во время переноса фрагмента удерживайте нажатой клавишу Ctrl. При выполнении обычной операции перетащить-и-опустить объект из источника удаляется.

6. Во время перемещения объекта под указателем-стрелкой появляется небольшой прямоугольник. Опустите перетаскиваемый объект на пустой элемент OLE Container. Через некоторое время документ Word появится в окне элемента управления OLE Container (рис. 14.5).

Теперь форма содержит документ Word. При запуске приложения документ Word будет отображаться в окне элемента управления OLE Container. Для его редактирования можно использовать меню и инструментальные панели Word.



Рис. 14.5. Объект, перемещаемый из документа Word, появляется в окне элемента управления OLE Container

Свойства Class, SourceDoc и Sourceltem. Рассмотрим несколько свойств элемента управления OLE Container. При создании объекта в форме окно Properties (Свойства) будет содержать следующую информацию:

•  имя прикладной программы, с помощью которой создан объект (свойство



Class);

• данные или ссылка на данные (свойство SourceDoc);

•  образ данных (свойство Sourceltem),

данное значение устанавливается только при связывании объектов и определяет данные (в пределах исходного файла), связанные с управлением OLE.

Свойство OLETypeAllowed. Будет исходный документ внедрен или связан с элементом управления OLE Container, зависит от установки значения свойства OLETypeAllowed. Выберите элемент управления OLE Container в форме и найдите в окне Properties свойство OLETypeAllowed. В табл. 14.2 перечислены допустимые значения этого свойства. По умолчанию установлено значение 2 — Either.

Таблица 14.2. Значения свойства OLETypeAllowed

Константа

Значение

Описание

vbOLELmked

vbOLEEmbedded

vbOLEEither

0

1

2

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

OLE Container может содержать только связанный

объект

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

OLE Container может содержать только встроенный

объект

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

OLE Container может содержать либо встроенный,

либо связанный объект (установлена по умолчанию)

Создадим связанный объект, установив значение свойства

OLETypeAllowed в О (Связанный). Значение этого свойства по умолчанию не задает тип создаваемого OLE-объекта, а лишь позволяет определить тип объекта, который может быть создан. Реально используемый тип OLE-объекта указан в диалоговом окне Insert Object (Вставка объекта). Например, если значение свойства OLETypeAllowed равно 2 то в диалоговом окне Insert Object (Вставка объекта) переключатели Create New и Create from File, а также флажок Link становятся доступными. Если же значение свойства OLETypeAllowed равно 0 (Связанный), то переключатель Create New блокируется (нельзя связаться с несуществующим объектом). Если устанавли­вается значение 1 (Встроенный), то блокируется флажок Link (Связь).

Связывание с помощью диалогового окна Insert Object

Метод перетащить-и-опустить – не единственный способ внедрения или связы­вания объектов в OLE Container. Опишем, как это выполняется с помощью диалогового окна Insert Object (Вставка объекта).



1. Удалите элемент управления OLE Container из формы Form1 и создайте новый элемент управления OLE Container, воспользовавшись рассмотренными выше рекомендациями.

2. В диалоговом окне Insert Object установите переключатель Create from File (Создать из файла) и флажок Link (Связь) (рис. 14.6). Как уже упоминалось, флажок Link (Связь) иногда блокируется Это происходит, когда значение свойства OLETypeAllowed равно 1 (Встроенный). Чтобы разблокировать флажок Link (Связь), установите значение свойства OLETypeAllowed в 2 (Связанный).

3. Щелкните на кнопке Browse (Обзор), чтобы отыскать требуемый файл.

4. Выбранный файл появится в окне элемента управления OLE Container. При этом может быть видна только его часть. Чтобы увидеть весь объект, измените размеры окна элемента управления.



Рис 14.6 Чтобы связать объект, установите флажок Link (Связать) в диалоговом окне Insert Object

В зависимости от установленного свойства SizeMode изображение в связанном файле может быть искажено. Теперь в элементе управления содержится ссылка на объект, а не его копия. Всякий раз, когда приложение-сервер изменяет связанный объект, объект в контейнере также изменяется.

Примечание

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

Если связанный объект является документом Word, то он появится в окне элемента управления OLE Container (см. рис. 14.5). В ячейке, содержащей значение свойства SourceDoc, содержится путь и имя файла связанного объекта.

5. Оставьте окно Visual Basic открытым, когда открыт документ Word. Внесите изменения в исходный документ и убедитесь, что связанный объект в окне Visual Basic изменяется в реальном масштабе времени. Чтобы это увидеть, запускать приложение не требуется. В режиме проектирования связанный документ модифицируется в реальном масштабе времени, как только редак­тируется оригинал.



Сохранение встроенных объектов и доступ к ним

Встроенные объекты создаются приложением-сервером, а сохраняются в при­ложении-контейнере. При встраивании объекта связь между содержимым элемента управления OLE Container и первоначальным объектом не устанавливается. Для редактирования встроенного объекта нужно обратиться к ресурсам программы, с помощью которой объект создан, но данные для нее предоставляет приложение-контейнер. Кроме того, данные во встроенном объекте не сохраняются автомати­чески. Для сохранения встроенного объекта и изменений, сделанных приложением-сервером, используется метод SaveToFile. Синтаксис этого метода:

OLEl.SaveToFile filenumber

Переменная

filenumber - это числовое значение, определяющее номер открытого файла. Номер передается в двоичном коде.

Ниже приведен фрагмент программы для ввода имени файла и сохранения встроенного документа с помощью метода SaveToFile.

Программа 14.1. Сохранение OLE-данных

Private Sub mnuFileSaveas Click()

Dim fnum As Integer

On Error GoTo Cancel

fnum = FreeFile

CommonDialogI.ShowSave

' Вывод на экран диалогового окна Save As

Open CommonDialogI.FileName For Binary As ftfnum

OLE1.SaveToFile (fnum)

Close ttfnum

Exit Sub

Cancel:

MsgBox "Could not save file" ' (Файл сохранен не был)

Close #fnum

End Sub

Для загрузки объекта, сохраненного как файл данных, предназначен метод ReadFromfile. Его синтаксис подобен синтаксису метода SaveToFile. Следующий

фрагмент программы реализует возможность чтения          содержимого элемента управления OLE Container из файла (в котором содержимое было сохранено методом SaveToFile).

Программа 14.2. Чтение OLE-данных

Private Sub mnuFileOpen_Click()

Dim fnum As Integer

On Error GoTo Cancel

CommonDialogI.ShowOpen ' вывод на экран диалогового окна   Open

Fnum = FreeFile

Open CommonDialogI.FileName For Binary As #fnum

OLE1.ReadFromFile (fnum)

Close #fnum

  Exit Sub

Cancel:

MsgBox "Could not load file"      ' (Файл загружен не был)

Close #fnum



End Sub

Примечание

Если значение свойства OLEType — 0 (vbOLELinked), то в указанном файле сохраня­ется только информация о

связи и о данных изображения. Если значение свойства OLEType — 1 (vbOLEEm), то данные из объекта сохраняются с помощью метода SaveToFile.

Если вы сохраняете файл с внедренным объектом, то с ним сохраняется следующая информация:

• имя прикладной программы, создавшей объект;

• данные объекта,

• метафайл изображения объекта;

Если вы сохраняете файл со связанным объектом, то с ним сохраняется следующая информация:

• имя прикладной программы, создавшей объект;

• имя файла-объекта;

•  метафайл изображения объекта.

Данные, сохраненные методом SaveToFile, доступны только приложению-контейнеру и только с помощью метода ReadFromFile.

Названные методы являются методами Visual Basic. Они вызываются непосредственно из прикладных программ, при этом информация о формате представления исходных данных не требуется.

Использование оперативного редактирования

При запуске приложения связанный или встроенный объект отображается прямо в форме Visual Basic. Выполнив двойной щелчок на объекте, пользователь может начать его редактирование. Открыть встроенный объект для редактирования можно несколькими способами (см. параграфы " Общие свойства элемента управ­ления OLE Container" и " Общие методы элемента управления OLE Container” далее в главе). Самый простой способ открыть приложение, предоставляющее объект для встраивания и средства редактирования (меню и панели инструментов) - выполнить двойной щелчок на объекте.

Оперативное редактирование (или оперативная активация) применяется для встроенных объектов. Пользуясь этой возможностью, можно редактировать встро­енный объект внутри OLE контейнера. Функциональные возможности приложения-сервера инкорпорируются в контейнер. Оперативное редактирование доступно, если приложение-сервер поддерживает автоматизацию OLE. Если выбрать встроенный объект, то меню и панели инструментов заменят меню и панели инструментов VB-приложения (рис. 14.7). Оперативное редактирование позволяет приложению-контейнеру заимствовать функциональные возможности приложения-сервера встро­енного объекта.



Рис. 14.7. Оперативное редактирование документа Word в окне элемента управления в приложении Visual Basic

Предупреждение

Некоторые приложения, использующие OLE, не могут отобразить собственные панели инструментов для оперативного редактирования объекта. Эта проблема связана с самой программой, и средствами VB-приложения не решается.


Содержание раздела