Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6_TKP_ObAvt.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
341 Кб
Скачать
☆

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');

осле этого методы объекта автоматизации можно вызывать как обычные методы любого объекта ObjectPascal: S.Method1(Param1.Param2);

Однако при этом следует помнить, что компилятор не может проверить корректность вызова методов, так как не имеет о них никакой информации. Поэтому предпочтительнее использовать позднее связывание. Для этого в модуле приложения-клиента следует объявить модуль библиотеки типов объекта автоматизации и работать с ним как с обычным СОМ-объектом.

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-документами.