приложений, работающих с различными СОМ-сервисами или серверами. Для более глубокого понимания принципов работы приложений, создаваемых на основе СОМ-технологии, проведем краткий обзор наиболее доступных СОМ-серверов – приложений пакета Microsoft Office.

Microsoft Office с точки зрения СОМ

Microsoft Office является средой, в которой большая часть задач решается без использования программирования. Но ценность приложений Microsoft Office за – ключается в том, что все задачи решаются как традиционным способом (ручное редактирование), так и посредством применения программирования на известном языке VBA (Visual Basic for Application). Кроме того, приложения пакета снабжаются серверами СОМ, которые предоставляют интерфейс доступа к приложению и его объектам. Благодаря этому разработчик в среде Delphi имеет возможность, создав контроллер автоматизации, управлять сервером. Приложение Microsoft Office можно рассматривать как совокупность объектов с их методами и свойствами (они организуют основу программы). Как правило, в каждом приложении существует так называемый корневой объект, который носит название Application. Каждое приложение Microsoft Office имеет собственный корневой обект – Word. Application, Excel.Application. Приложение само является корневым объектом, несмотря на это, в объект Application встраиваются все остальные объекты (участники), которые являются свойствами главного объекта. Документ, созданный на базе СОМ, предоставляет большое количество разнообразных методов, но имеются и одинаковые методы в различных приложениях Microsoft Office. Например, Run, Quit, Activate.

При открытии любого приложения из пакета автоматически создается каркас нового документа, который представляет собой набор библиотек с классами. Объекты этих классов будут доступны в открытом документе. Задача разработчика клиента (контроллера автоматизации) – получить доступ к корневому объекту сервера, выстроить цепочку доступа к объектам- участникам (встроенным объектам), правильно передать параметры. Таким образом, получив доступ к объектам документа, можно проводить с ним различные манипуляции, редактировать его и т. д.

Объект Application

Безусловно, самым важным объектом в приложениях Microsoft Office является объект Application. Небольшой пример использования данного объекта продемонстрирует простоту программирования с применением СОМ. Для решения часто встречающихся задач используются уже хорошо нам известные компоненты среды Delphi. В случае технологии СОМ это не является исключением. Запустим сервер приложения Microsoft Word. Для этого выполним следующее.

1. Создаем новый проект.

2. На главную форму приложения помещаем компонент WordApplication вкладки Servers.

3. Задаем свойства компонента AutoConnect и AutoQuit значением True.

4. Запускаем созданное приложение.

На первый взгляд, ничего существенного не происходит, но результат работы программы можно заметить путем просмотра запущенных процессов (не путать с задачами). В приложении Диспетчер задач среди процессов различных приложений можно увидеть WordCOM. ехе. Этот факт говорит нам о том, что созданное нами посредством СОМ приложение подключилось к серверу Microsoft Word и запустило его. Фактически в системе произошло следующее. В реестре был найден зарегистрированный ранее СОМ-сервер приложения Microsoft Word. Используя все тот же реестр, был найден путь к программе и произведен ее запуск. Вследствие этого мы заметили появление процесса, отвечающего за работу редактора Microsoft Word.

Но для того чтобы лучше понять запуск приложения Microsoft Word, приведем фрагмент исходного текста, результат работы которого аналогичен (листинг 9.1).

...

Листинг 9.1.

Запуск Microsoft Word

procedure TFormStartWord.ButtonStartClick(Sender: TObject);

var

//Переменная, интерфейс к объекту

Wordvar : OleVariant;

file_Name : string;

begin

//Начало блока перехвата исключения

try

file_Name := ExtractFilePath(Application.EXEName) +

'worddoc.DOC

//Инициализируем объект интерфейса

//для доступа к серверу COM Microsoft Word

Wordvar := CreateOleObject('Word.Application');

//Добавление документа

wordvar.application.documents.add;

wordvar.application.activedocument.range.insert After(now);

//Сохранение документа (аналог действиям: «Сохранить как…»,

//с указанием имени файла)

wordvar.application.activedocument.saveas(fileName);

//Завершение работы с приложением и выгрузка COM-сервера

wordvar.application.quit(true,0);

end;

Предложенный исходный текст демонстрирует подключение к серверу без помощи компонента среды разработки. Для корректной работы необходимо в раздел uses включить COMOBJ – модуль работы с объектом СОМ. Важно отметить, что наличие функций, вызываемых для объекта wordvar, определяется в период выполнения. Это значит, что ошибка может обнаружиться только в период выполнения программы, поэтому весь код работы с объектом помещен в блок try.

Класс TOLEServer

На вкладке Servers находится набор компонентов для доступа к серверам автоматизации. Не все компоненты возвращают ссылку на объект Application, то есть могут быть получены интерфейсы для доступа к таким вложенным объектам, как документ Microsoft Word или рабочая книга Microsoft Excel. Все компоненты унаследованы от класса TOLEServer, который наследует свойства класса Tcomponent. TOLEServer является базовым классом всех СОМ-серверов. Кроме этого, данный класс имеет еще несколько свойств и методов для управления связью с СОМ-сервером. Среди таковых уже знакомое нам свойство AutoConnect, которое автоматически запускает СОМ-сервер и извлекает из него интерфейс, обеспечивающий связь с контроллером. Еще одно важное свойство класса TOLEServer – это ConnectKind, указывающее тип процесса, с которым устанавливается связь. Свойство используется методом Connect, который вызывается автоматически, если свойство AutoConnect истинно. В табл. 9.1 описаны значения, которые может принимать ConnectKind.

Таблица 9.1. Значение свойства ConnectKind

Более подробно следует рассмотреть значение свойства ConnectKind, равное ckAttachToInterface. Соединение с сервером производится посредством использования главного интерфейса Application, но, например, возникает необходимость подключить к нашему проекту такие компоненты как WordDocument или WordParagraphFormat. В этом случае мы просто подключаемся к уже существующему интерфейсу, а не создаем его заново. Также это может быть необходимо, когда контроллер должен отслеживать события, происходящие в СОМ-сервере.

9.4. Управление Microsoft Word и Microsoft Excel

Трюки в Microsoft Word

В этом разделе мы более подробно остановимся на рассмотрении практических примеров использования СОМ-сервера редактора Microsoft Word. Достаточно популярный редактор обладает обширным набором возможностей, которые можно использовать вручную (традиционное создание и редактирование документов) и с применением технологии СОМ. Основное удобство последнего метода заключается в автоматизации рутинной работы, например составления отчетов. Следующий пример поможет нам разобраться в принципах построения контроллеров автоматизации, которые ранее уже упоминались. Контроллер автоматизации с точки зрения СОМ представляет собой приложение, которое посредством вызова процедур сервера проводит различные манипуляции над документом. В Microsoft Word это может быть написание текста в установленном формате и т. д.

Рассмотрим пример приложения, которое будет создавать новый документ Microsoft Word, записывать в него некоторый текст, добавлять таблицу и сохранять полученный документ в файл. В целях наилучшего понимания принципов использования объектов СОМ первый пример не будет использовать компонент среды разработки. Итак, приступим к созданию приложения. Для начала создаем новый проект и помещаем на форму следующие кнопки:

• открытия приложения Microsoft Word;

• вывода текста;

• добавления таблицы;

• сохранения документа;

• завершения работы Microsoft Word.

Мы не будем использовать компоненты, поэтому добавляем в секцию uses модуль ComOb j. Для работы с СОМ-сервером редактора нам понадобится объект OLE. Добавляем переменную типа OleVariant:

...

var

//Объект OLE

Wrd: OleVariant;

Обработчик кнопки запуска редактора имеет следующий вид (листинг 9.2).

...

Листинг 9.2.

Запуск редактора Microsoft Word

procedure TFormWord.bnOpenWordClick (Sender: TObject);

begin

//Создаем объект

Wrd := CreateOleObject ('Word.Application');

//Делаем видимым приложение

Wrd.Visible := true;

//Добавляем новый документ

Wrd.Documents.Add;

end;

После инициализации

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату