Обзор
Основы OLE
Объект TOLEContainer
Пример OLE приложения
Сохранение OLE объекта в базе данных
Обзор
Из статьи Вы узнаете основные
сведения об OLE, некоторые вещи
относительно OLE 2 и OLE Automation. В статье
рассказывается об использовании
объекта TOLEContainer для построения OLE
приложения в Delphi.
Основы OLE
Прежде, чем перейти к
рассмотрению основ OLE, потребуется
изучить терминологию.
Аббревиатура OLE обозначает Objects
Linked and Embedded (Присоединенные И
Встроенные Объекты ). Данные,
разделяемые между приложениями
называются 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;
[ Предыдущий урок | Содержание | Следующий урок ]
|