Программирование для Word из Delphi
МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ Н.П. ОГАРЕВА Светотехнический факультет Кафедра светотехники КУРСОВАЯ РАБОТА Программирование для Word из Delphi САРАНСК 2008 Реферат Курсовая работа содержит 23 страницы, 9 использованных источников, 1 рисунок, 2 таблицы и 1 приложение. В курсовой работе используются следующие ключевые слова: COM, OLE, сервер автоматизации, интерфейс, IDispatch, объект, семейство. Объектом исследования является технология взаимодействия приложений с текстовым редактором Microsoft Word. В процессе работы использовалась учебная литература по программированию в среде Borland Delphi для Windows. В результате исследования: изучена методика создания приложений передающих данные в Microsoft Word. Содержание Введение 1. Основы COM-технологии 1.1 COM-объекты 1.2 Вызов методов COM-объектов 1.3 Создание и использование экземпляров серверов автоматизации 2. Экспорт информации в Microsoft Word 2.1 Структура приложения Microsoft Word 2.2 Запуск сервера 2.3 Взаимодействие с сервером на уровне документа 2.4 Непосредственный вывод информации 2.5 Форматирование текстовой информации 2.6 Использование закладок 2.7 Управление приложением Заключение Список использованных источников Пиложение 1 Введение Цель курсовой работы заключена в изучении технологий вывода данных из приложений созданных в среде Borland Delphi в другие распространенные программы, такие как Microsoft Office и в частности Microsoft Word. Среда Borland Delphi предоставляет широкие возможности вывода информации на принтер с помощью объекта 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 определяет, какой именно его метод должен быть вызван, выполняет его, запаковывает результат и возвращает его в вызвавшую программу. Объекты автоматизации поддерживают также и доступ к свойствам через специальным образом описанные методы. Для разрушения структур данных, связанных с использованием СОМ-объекта в программе, следует присвоить ссылке на него значение Unassigned. Данная операция не закрывает запущенный сервер автоматизации: Var Object: Variant; Object := CreateOleObject('Word.Application'); Object := Unassigned; // Разрушение программных структур 2. ЭКСПОРТ ИНФОРМАЦИИ В MICROSOFT WORD 2.1 Структура приложения Microsoft Word Приложения, входящие в состав Microsoft Office, имеют иерархическую объектную структуру. Структура каждого приложения сложна и существенно отличается от структуры других приложений, что обусловлено различной направленностью самих приложений. Объекты иерархий Microsoft Office содержат в себе методы, количество которых приблизительно равно количеству действий, поддерживаемых при редактировании документов, поэтому их число очень велико. Иерархическая структура объектов отражает представление данных, редактируемых в том или ином приложении. Структура Microsoft Word включает в себя объект верхнего уровня Application, управляющий непосредственно приложением, и вложенные в него объекты типа Document, предоставляющие доступ к документам, открытым в данный момент. При добавлении очередного объекта Document сторонним приложением с помощью методов сервера автоматизации Microsoft Word открывает очередной документ. Аналогично объекты типа Document могут содержать в себе объекты типа Paragraph, представляющие собой ссылки на абзацы текста. Доступ к объектам различного уровня из программы-клиента, реализованной, например, на Delphi, осуществляется единообразно, через ссылки на вышестоящие в иерархии объекты. Объекты одного уровня и назначения, например, объекты типа Document, объединяются в одно свойство, так называемое семейство, которое имеет название типа объектов во множественном числе. Таким образом, объекты типа Document объединяются в свойство Documents.
Страницы: 1, 2
|