Урок 13: OLE

Урок 13: OLE

  1. Обзор
  2. Из статьи Вы узнаете
    основные сведения об OLE, некоторые
    вещи относительно OLE 2 и OLE
    Automation. В статье рассказывается об использовании
    объекта TOLEContainer для построения
    OLE приложения в Delphi.

  3. Основы OLE
  4. Прежде, чем перейти к рассмотрению основ 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
    поддерживает сервер.

  5. Объект TOLEContainer
  6. Объект
    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.

  7. Пример OLE приложения
  8. Среди демонстрационных примеров, входящих в 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), этому посвящена
    отдельная глава.

  9. Сохранение 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;

Комментариев Нет.

Написать Ответ

Вы должны войти чтобы оставить комментарий.