Смекни!
smekni.com

Программирование для Word из Delphi (стр. 1 из 3)

МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИМЕНИ Н.П. ОГАРЕВА

Светотехнический факультет

Кафедра светотехники

КУРСОВАЯ РАБОТА

Программирование для Word из Delphi

САРАНСК 2008

Реферат

Курсовая работа содержит 23 страницы, 9 использованных источников, 1 рисунок, 2 таблицы и 1 приложение.

В курсовой работе используются следующие ключевые слова:

COM, OLE, сервер автоматизации, интерфейс, IDispatch, объект, семейство.

Объектом исследования является технология взаимодействия приложений с текстовым редактором MicrosoftWord.

В процессе работы использовалась учебная литература по программированию в среде Borland Delphi для Windows.

В результате исследования: изучена методика создания приложений передающих данные в MicrosoftWord.


Содержание

Введение

1. Основы COM-технологии

1.1 COM-объекты

1.2 Вызов методов COM-объектов

1.3 Создание и использование экземпляров серверов автоматизации

2. Экспорт информации в MicrosoftWord

2.1 Структура приложения MicrosoftWord

2.2 Запуск сервера

2.3 Взаимодействие с сервером на уровне документа

2.4 Непосредственный вывод информации

2.5 Форматирование текстовой информации

2.6 Использование закладок

2.7 Управление приложением

Заключение

Список использованных источников

Пиложение 1


Введение

Цель курсовой работы заключена в изучении технологий вывода данных из приложений созданных в среде Borland Delphi в другие распространенные программы, такие как MicrosoftOffice и в частности MicrosoftWord. Среда BorlandDelphi предоставляет широкие возможности вывода информации на принтер с помощью объекта TPrinter. Однако большинство задач печати сводится к выводу текста или таблиц. При этом с одной стороны, в программах приходится реализовывать сложные алгоритмы форматирования текста при выводе, а с другой стороны, такие задачи дублируют широко распространенные пакеты, в которых данные возможности уже реализованы. Более того, вывод информации на печатающее устройство жестко определяет вид получаемых документов, на который пользователь не может повлиять. При этом с развитием компьютерной техники печатные документы становятся все менее востребованными в связи с широким использованием для обмена информацией электронной почты и факсов. В таких условиях целесообразно наделять программные продукты возможностями сохранения информации в общепринятых форматах, таких, например, как формат текстовых документов RTF, тем более, что Delphi частично поддерживает такие возможности. Однако работа с такими форматами все-таки не проста, и требует от разработчика дополнительных усилий, особенно в условиях быстрого обновления стандартов на форматы представления данных.

Второй подход к повышению гибкости вывода информации поддерживается наличием в Windows технологии OLE (Object Linking and Embedding – связывание и внедрение объектов), позволяющей запускать сторонние приложения и передавать им данные, вызывая методы этих приложений. Технология OLE является частью технологии СОМ – признанного стандарта для выполнения подобных операций, и все больше программных продуктов поддерживают такие возможности. Исключением не является и группа продуктов Microsoft Office, каждое приложение которой может быть использовано из Delphi-приложений для передачи в них данных.


1. ОСНОВЫ COM-ТЕХНОЛОГИИ

1.1 COM-объекты

СОМ (Component Object Model – Модель многокомпонентных объектов) – является объектно-ориентированной концепцией, описывающей правила построения классов, называемых СОМ-объектами, с целью обеспечения взаимодействия между ними вне зависимости от языка, на котором реализованы данные классы, и среды, в которой выполняются приложения, содержащие их. Объекты СОМ реализуются в специальном двоичном формате, являющимся фактически описанием класса, и не зависящем от языка разработки, и предоставляют свою функциональность (позволяют вызывать свои методы) через набор интерфейсов. Каждый СОМ-объект реализует как минимум один интерфейс IUnknown выполняющий следующие действия:

1. Поддержка счетчика экземпляров объекта с помощью методов AddRef, вызываемого при создании экземпляра класса для увеличения значения счетчика, и Release, вызываемого при разрушении экземпляра для уменьшения значения счетчика;

2. Предоставление ссылки на интерфейс, заданный его уникальным идентификатором, и поддерживаемый СОМ-объектом, с помощью метода Query Interface.

Для идентификации СОМ-объектов применяются глобальные уникальные идентификаторы, представляющие собой 128-разрядные целые числа, записываемые в следующем формате, где вместо символа 'х' указывается шестнадцатеричная цифра:

['{хххххххх-хххх-хххх-хххх-хххххххххххх}']


Например, главное приложение графического редактора Adobe Photoshop имеет такой идентификатор:

{43191D98-5D34-4103-BE42-226A55C2312A}

1.2 Вызов методов СОМ-объектов

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

1. Через интерфейс IDispatch.

2. Через таблицу виртуальных методов.

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

На рис 1. приложение-клиент «Приложение1» обращается к методу «Метод 2» СОМ-объекта напрямую, используя механизм раннего связывания. Для этого адрес метода должен быть внесен в таблицу виртуальных методов приложения.

Второй вариант связывания – позднее связывание – осуществляется с помощью использования интерфейса IDispatch. СОМ-объекты, реализующие интерфейс IDispatch, называются серверами автоматизации. Именно серверы автоматизации и интересуют нас в контексте вывода информации за пределы программы.

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

Интерфейс IDispatch предназначен для использования сервера автоматизации в условиях позднего связывания и имеет несколько методов для определения информации о типах. Также в интерфейсе IDispatch заявлен метод Invoke, которому передается имя метода для вызова и список необходимых параметров. На этом методе и построен механизм использования серверов автоматизации из Delphi-программ. Механизм вызова метода объекта через метод Invoke интерфейса IDispatch, реализованного этим объектом, показан на рис. Приложение-клиент «Приложение 2» обращается к методу invoke, который определяет метод «Метод 2», запрошенный приложением, и вызывает его.

Метод invoke имеет множество сложных параметров, однако он не используется напрямую разработчиком прикладного программного обеспечения. Вызовы данного метода добавляются в программу автоматически во время компиляции.

Рис 1. Различные механизмы вызова методов COM-объектов.

1.3 Создание и использование экземпляров серверов автоматизации

Для создания сервера автоматизации используется функция CfeateOleObject, описанная в модуле Comobj следующим образом:

function CreateOleObject(const ClassName: string): IDispatch;

Функция выдает ссылку на интерфейс IDispatch объекта, зарегистрированного в реестре Windows под именем ClassName. Для определения названия класса следует изучить документацию к программному продукту, предоставляющему сервер автоматизации. Для приложения Microsoft Word таким именем является «Word.Application», а для Microsoft Excel – «Excel.Application». Аналогичные названия классов имеют и другие компоненты Microsoft Office.

Если сервер автоматизации уже запущен, то ссылку на него можно получить с помощью функции GetActiveOleObject:

function GetActiveOleObject(const ClassName: string): IDispatch;

Если при вызове метода GetActiveOleObject система не может обнаружить запущенную версию заданного сервера автоматизации, то будет возбуждена исключительная ситуация класса EOleError.

Ссылки, которые возвращают функции GreateOleObject и GetActiveOleObject, следует сохранять в переменных для дальнейшего доступа к созданному или полученному объекту. Несмотря на то, что тип ссылки определен как IDispatch, переменная, в которую эта ссылка сохраняется, должна иметь тип Variant. Это связано с тем, что из данной переменной будут вызываться методы сервера автоматизации, которые не описаны в интерфейсе IDispatch.

Var

Object: Variant;

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

Использование экземпляра сервера автоматизации, то есть вызов его методов, осуществляется с помощью конструкций, обычных для вызова методов в Delphi:

<Ссылка на сервер>.<Название метода>(<Список параметров>);

Однако механизм, используемый для реального вызова, существенно отличается от вызова методов Delphi-классов. Название метода и список его параметров запаковываются в специальную структуру, которая затем передается методу invoke СОМ-объекта через ссылку, полученную при вызове функции CreateOleObject. Метод invoke определяет, какой именно его метод должен быть вызван, выполняет его, запаковывает результат и возвращает его в вызвавшую программу.