Содержание
Обзор
Основы OLE
Объект
TOLEContainer
Пример OLE
приложения
Сохранение OLE
объекта в базе данных
-
- Обзор
- Из
статьи Вы узнаете основные
сведения об OLE, некоторые
вещи относительно OLE 2 и OLE
Automation. В статье
рассказывается об
использовании объекта
TOLEContainer для построения OLE
приложения в Delphi.
- Основы
OLE
- Прежде,
чем перейти к рассмотрению
основ OLE, потребуется
изучить терминологию.
Аббревиатура
OLE обозначает Objects Linked and
Embedded (Присоединенные И
Встроенные Объекты - ПИВО J ). Данные,
разделяемые между
приложениями называются OLE
объектом. Приложение,
которое может содержать OLE
объекты, называют OLE
контейнером (OLE Container). Приложение,
данные из которого можно
включить в OLE контейнер в
виде OLE объекта, называют OLE сервером.
Например,
MicroSoft Word может включать в
документ графические
объекты, аудио- и
видеоклипы и множество
других объектов (такой
документ иногда называют составным
документом - compound document ).
Как
следует из названия, OLE
объекты можно либо
присоединить к OLE
контейнеру, либо включить
в него. В первом случае
данные будут храниться в
файле на диске, любое
приложение будет иметь
доступ к этим данным и
сможет вносить изменения.
Во втором случае данные
включаются в OLE контейнер и
только он сможет
просматривать и
модифицировать эти данные.
OLE
является дальнейшим
развитием идеи
разделяемых между
приложениями данных. Если
с помощью DDE можно было
работать с текстом, то OLE
позволяет легко встроить в
приложение обработку
любых типов данных. Как и в
случае с DDE, для правильной
работы приложения-клиента
(OLE контейнера) требуется
наличие приложения OLE
сервера. Каждый раз, когда
в программе-клиенте
пользователь обращается к
OLE объекту с целью
просмотра или
редактирования данных
(обычно двойной щелчок
мышкой на объекте),
запускается
приложение-сервер, в
котором и происходит
работа с данными.
В
природе существует
несколько видов OLE,
отличающихся по способу
активации OLE сервера. OLE
версии 1 запускает сервер в
отдельном окне. OLE 2
реализует то, что
называется in-place
activation and editing. В данном
случае сервер запускается
“внутри”
приложения-клиента,
модифицирует вид
системного меню, линейки
инструментов и др.
Развитие идеи OLE привело к
появлению OLE
automation -
приложение-клиент может
выполнить часть кода
сервера. Тип OLE объекта,
помещенного в
программу-клиент,
определяется тем, какую
версию OLE поддерживает
сервер.
- Объект
TOLEContainer
- Объект TOLEContainer
находится на странице System
Палитры Компонент и нужен
для создания приложений
OLE-контейнеров. TOLEContainer
скрывает все сложности,
связанные с внутренней
организацией OLE и
предоставляет
программисту достаточно
простой интерфейс.
Построим простейшее
приложение с
использованием OLE объекта.
Создайте новый проект и
поместите на форму TOLEContainer,
в Инспекторе Объектов
дважды щелкните мышкой на
свойство ObjClass или ObjDoc -
появится стандартный
диалог Windows “Insert Object” (см.
рис.1)
В
этом диалоге есть список
всех зарегистрированных в
системе OLE-серверов
(регистрация происходит
при инсталляции
программы). Тип OLE-объекта
определяется как раз тем
сервером, который Вы
укажете. Если Вы создаете
новый объект (Create New), то при
нажатии кнопки OK
запустится программа
OLE-сервер, в которой и
формируется новый объект.
После выхода из
программы-сервера новый OLE
объект включается
(embedded object) в программу. OLE
объект можно создать
используя уже имеющийся
файл в формате одного из
OLE-серверов. Для этого
нужно выбрать пункт Create from
File (см. рис.2)
Выбранный
объект можно как включить
в приложение, так и
присоединить, отметив
пункт Link.
Итак,
давайте при создании
нашего проекта создадим
новый объект, выбрав для
этого, например, Microsoft Word
Document (рис.1). Нажмите OK и
после того, как запустится
MS Word, наберите там любой
текст (“Это OLE-объект Microsoft
Word document”). Для
завершения работы в меню
есть специальный пункт
“File|Close and Return to Form1” (Win’95+MS
Word 7.0). Запустите проект, он
будет выглядеть примерно
так:
Щелкните
дважды мышкой на
OLE-контейнер - запустится MS
Word с документом из
OLE-объекта, который можно
редактировать, при этом
все изменения сохраняются
в OLE-объекте.
!!!
Если во время дизайна Вы
выбираете объект для
включения в OLE-контейнер,
то он полностью
записывается в файл формы
(FORM1.DFM) и в дальнейшем
прикомпилируется к EXE
файлу. В случае очень
больших объектов это может
привести во время дизайна
к длительным паузам и даже
к возникновению ошибки “Out
of resource”. Поэтому
рекомендуется большие
объекты делать
присоединенными (linked).
TOLEContainer
позволяет отображать в
программе объект в его
непосредственном виде (с
различной степенью
увеличения или уменьшения
- свойство Zoom) или в виде
пиктограммы, определяемой
в диалоге на рис.1 (Display as
Icon).
Выбор
OLE-объекта может
происходить не только во
время дизайна, но и во
время выполнения
программы (об этом чуть
ниже). Результаты работы с
этим объектом можно
сохранить в виде файла и в
следующий раз
восстановить его оттуда,
для этого TOLEContainer имеет два
метода SaveToFile и LoadFromFile.
- Пример
OLE приложения
- Среди
демонстрационных
примеров, входящих в Delphi
есть два, относящихся к
работе с OLE-объектами (в
директориях X:\DELPHI\DEMOS\OLE2 и
X:\DELPHI\DEMOS\DOC\OLE2). Более
полным является второй,
который, кроме всего
прочего является примером
построения MDI приложения.
Данная программа
демонстрирует все
основные возможности
TOLEContainer и позволяет:
-
создавать новый OLE
контейнер во время
выполнения программы;
-
инициализировать OLE объект
либо в стандартном диалоге
Windows “Insert Object”, либо с
помощью Clipboard, либо с
помощью техники
“перенести и бросить”
(drag-and-drop);
-
сохранить OLE объект в файле
и восстановить его оттуда;
На
рис.4 показан пример MDI
приложения, содержащий два
дочерних окна с OLE
объектами. Для создания
нового OLE объекта нужно
выбрать пункт меню File|New и
далее Edit|Insert Object. Появится
стандартный диалог Windows
для инициализации OLE
объекта (см. рис.1). Если
приложение OLE-сервер имеет
возможность сохранять
информацию об OLE
объекте в Clipboard, то
проинициализировать
объект можно с помощью
пункта меню Edit|Paste Special.
Достаточно
интересной является
возможность применения
техники drag-and-drop в
применении к OLE объектам.
Запустите MS Word (разместите
его окно так, чтобы было
видно и OLE приложение),
наберите какой-нибудь
текст, выделите его и с
помощью мышки перетащите и
бросьте на главное MDI окно
приложения. Появится новое
дочернее окно с OLE
контейнером, содержащим
этот текст.
Программирование данной
возможности достаточно
сложно. Полное описание
технологии построения
данного OLE приложения есть
в документации в коробке с
Delphi (User’s guide), этому
посвящена отдельная глава.
- Сохранение
OLE объекта в базе данных
Иногда
необходимо хранить OLE объекты не в
файлах, а в базе данных (BLOB поле в
таблице). Конечно, в данном случае OLE
объект должен быть присоединенным
(embedded) в целях переносимости. К
сожалению, в стандартной поставке
Delphi нет специального объекта типа
TDBOLEContainer для данных целей, но OLE
объект можно сохранять и
восстанавливать с помощью методов
SaveToStream и LoadFromStream. Например:
procedure TOLEForm.SaveOLE(Sender:
TObject);
var
BlSt : TBlobStream;
begin
With Table1 do
BlSt:=TBlobStream.Create(BlobField(FieldByName('OLE')),
bmReadWrite);
OLEContainer.SaveToStream(BlSt as
TStream);
BlSt.Free;
end;
|