- •Разработка объекта автоматизации в среде delphi.
- •6.6 Методические указания.
- •6.6.1 Расширения com
- •6.6.2 Мастера для создания сом-объектов
- •6.6.3 Технология автоматизации
- •6.6.4. Интерфейс iDispatch
- •6.6.5. Интерфейсы диспетчеризации
- •6.6.6 Создание серверов автоматизации в Delphi
- •6.6.6.1 Создание внешнего сервера автоматизации.
- •6.6.6.2 Разработка клиента автоматизации
- •7.6.7 Использование ole-документов в приложениях
- •6.6.7.1 Основные сведения об ole-документах
- •6 .6.7.2 Компонент tOleContainer.
- •6.6.7.3 Применение компонента tOleContainer для работы с ole-документами.
- •6.6.7.3.1 Простейший пример использования компонента tOleContainer.
- •6.6.7.3.2 Основные способы использование компонента tOleContainer.
- •6.6.7.3.3 Управление объектом внутри ole-контейнера
6.6.6.2 Разработка клиента автоматизации
Использование объекта автоматизации в приложениях не вызывает особых сложностей. этот вопрос уже рассматривался в процессе выполнения II учебной практики [11], где Вы познакомились с разработкой клиентов автоматизации для приложений MS Office. Поэтому, ограничимся рядом общих замечаний.
При
использовании позднего связывания
создание экземпляра объекта автоматизации
и получение указателя на его интерфейс
выполняется с помощью функции
CreateOleObject(const ClassName: string): IDispatch. В качестве
параметра данной функции передается
строка, содержащая имя сервера
автоматизации и имя объекта автоматизации
(для сервера, рассмотренного в приведенном
выше примере, эта строка выглядит
следующим образом: 'AutoServer.TestAuto'). Для
работы с объектами автоматизации
используется специальный тип переменных
- OleVariant. Т
аким
образом, чтобы получить доступ к методам
объекта автоматизации, следует объявить
переменную типа OleVariant и создать объект
с помощью функции CreateOleObject:
П
var
S : OleVariant;
………………………………………………..
S :=
CreateOleObject('AutoServer.TestAuto');
Однако при этом следует помнить, что компилятор не может проверить корректность вызова методов, так как не имеет о них никакой информации. Поэтому предпочтительнее использовать позднее связывание. Для этого в модуле приложения-клиента следует объявить модуль библиотеки типов объекта автоматизации и работать с ним как с обычным СОМ-объектом.
7.6.7 Использование ole-документов в приложениях
6.6.7.1 Основные сведения об ole-документах
OLE-документы – это, по существу, внедренные или связанные объекты, созданные приложениями, выступающими в качестве COM–серверов.
Внедрение (Embedding) позволяет помещать данные в некотором формате в документ, где информация хранится в совершенно другом виде. Последний часто называют документом или файлом-контейнером. Например, можно поместить в документ, созданный редактором Word, таблицу, которая подготовлена с помощью Excel. При этом внедренный документ теряет связь с исходным файлом и изменения, внесенные в последний, не отражаются на внедренном документе.
Под связыванием (Linking) подразумевается установление таких отношений между двумя документами, что всякое изменение исходного файла будет отображаться в том, с которым он связан. Реально в документе-контейнере хранится ссылка на исходный документ.
Правила создания контейнеров для таких внедренных или связанных объектов (называемых также OLE-контейнерами), описывает соответствующая спецификация COM, и одно из основных требований этой спецификации – активация по месту (in-place activation), т. е. реализация возможности редактирования объекта находящегося в OLE-контейнере за счет автоматического запуска для этой цели приложения-сервера. Особенностью OLE-документов является то, что их активизация (обычно – двойным щелчком мыши) приводит к активизации связанной с ними программы (называемой OLE-сервером), которая после загрузки показывает на экране свое окно и предоставляет пользователю средства редактирования объекта. Например, для электронной таблицы, созданной в среде Excel, и, вставленной в документ Word, щелчок мышью загружает окно редактирования Excel.
П
рименение
указанных технологий возможно только
в том случае, если в вашей системе уже
имеются сервера OLE, умеющие работать с
документами. Под документом здесь
понимается файл, содержащий информацию
в некотором зарегистрированном в системе
формате. Типичными OLE-серверами являются
такие системные утилиты, как Paint и
Notepad, текстовый процессор Word, табличный
процессор Excel и др. Перечень OLE-серверов,
доступных в системе, можно определить,
например, с помощью команды Вставка
| Объект
главного меню текстовый процессора
Microsoft Word или аналогичных ей команд в
других программных продуктах. При этом,
в открывшемся окне (рис. 6.
) Вставка
объекта
появится перечень типов зарегистрированных
в системе объектов (серверы OLE-документов).
В отличие от простейших COM-объектов, использующих только один стандартный интерфейс lUnknown, и объектов автоматизации, использующих два стандартных интерфейса - lUnknown и IDispatch, у ole-документов и OLE-серверов список используемых стандартных интерфейсов гораздо обширнее. И это – не удивительно, ибо, кроме стандартных интерфейсов lUnknown и IDispatch, они содержат интерфейсы, используемые и для активизации на месте (их называние обычно начинается аббревиатурой lOlelnPlace……, например, - IOlelnPlaceObject, lOlelnPlaceActiveObject, lOlelnPlaceSite и др.), и для связывания (IoleLink, IPersistFile, IoleItemContainer и др.) и для внедрения (IoleObject, IPersistStorage, IadviseSink, IViewObject2 и др.), а так же некоторые другие интерфейсы, специфичные для конкретного OLE-документа или OLE-сервера. Например, на рис. 6. показан набор интерфейсов документа Microsoft Word, полученный с помощью утилиты OLE View (OLE/COM Object Viewer).
Несмотря на то, что внутренняя структура OLE-документов сложнее, чем структура рассмотренных выше объектов автоматизации, работа с OLE-документами обычно оказывается проще, чем работа с объектами автоматизации. Дело в том, что разработчикам редко приходится создавать OLE-сервера “с нуля”, - обычно их разрабатывают крупные фирмы-разработчики ПО. При создании же клиентских приложений, работающих с OLE-документами, программисту обычно приходится иметь дело с компонентом-контейнером, в наборе свойств и методов которого инкапсулированы средства работы с этими документами. Это практически исключает необходимость прямого обращения к интерфейсам, необходимым для работы с OLE-документами.
