Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример использования раннего связывания

Использование раннего связывания для доступа к объекту автоматизации

При использовании раннего связывания компилятор должен получить информацию о методах и свойствах, которыми обладает объект автоматизации. Информация такого рода содержится в библиотеках типов, которые поставляются вместе с сервером автоматизации. Это могут быть файлы в одном из следующих форматов:

• Type Library (.tlb);

• Object Type Library (.olb);

• в файлах элементов управления ActiveX (.ocx);

• в файлах ресурсов, скомпонованных с исполняемыми файлами (.ехе) или динамически загружаемыми библиотеками (.dll).

В библиотеках типов обычно содержится следующая информация:

• информация о перечислениях, используемых сервером автоматизации;

• описания обычных интерфейсов, интерфейсов диспетчеризации и классов составных объектов;

• ссылки на описания типов в других библиотеках.

Чтобы импортировать информацию о типах в проект, используется команда Project->Import Type Library главного меню Delphi IDE. При выборе этой команды открывается окно диалога Import Type Library, в котором содержится список всех серверов автоматизации и элементов ActiveX, зарегистрированных в системе. Список классов, описанных в библиотеке, приводится в списке Class names.

Для импорта библиотеки типов в проект следует выбрать нужный сервер и щелкнуть на одной из кнопок Install или Create Unit. В обоих случаях Delphi сгенерирует файл, содержащий описание типов выбранной библиотеки в синтаксисе языка Object Pascal, и добавит его к текущему проекту.

В поставку Delphi 5 также включен целый ряд компонентов, значительно облегчающих взаимодействие с приложениями MS Office. Данные компоненты разметены на странице Servers палитры компонентов. Однако вначале мы познакомимся с более общим случаем — передачей текста в MS Word без использования специальных компонентов. Для этой цели рассмотрим пример, аналогичный приведенному выше: из программы, написанной в Delphi, вызовем MS Word, создадим новый документ и передадим в него текст. Для реализации этого алгоритма выполним следующую последовательность действий:

1. Создаем новое приложение.

2. Если используем Delphi 5, то просто включим в раздел uses модуля формы модуль Word2003 или Word07 (в зависимости от версии MS Office).

3. Поместим на форму кнопку и зададим для нее следующий обработчик события

OnClick:

procedure TForml.ButtonlClick(Sender: Tobject);

var

W: _Application:

D: OleVariant:

begin

W:=CoWordApolicatIon.Create:

W.Visible:=true;

W.Documents.Add(EmptyPa ram.EmptyParam,

EmptyParam.EmptyParam);

W.Selection.InsertAftert’Пример создания нового документа’+#13);

W.Selection.InsertAfter('и передачи в него текста'+#13);

0:=wdCollapseEnd;

W.Selection.Collapse(D);

end;

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

Поясним назначение некоторых элементов кода этого фрагмента:

• связь с сервером автоматизации устанавливается с помощью метода Create класса CoWordApplIcation, описание которого также содержится в библиотеке типов. При вызове данного метода запускается приложение MS Word и переменная W получает указатель на интерфейс_Application сервера Word;

• чтобы окно MS Word было видимым, свойству Visible интерфейса_Application следует присвоить значение true;

• для создания нового документа используется метод Add объекта Documents — коллекции всех документов, открытых в приложении MS Word;

• добавление строк текста к созданному документу выполняется с помощью метода InsertAfter объекта Selection, который указывает на выделенный фрагмент текста или, при отсутствии выделения, на текущую позицию курсора. Текст, добавленный таким образом, будет выделяться. Для снятия выделения используется метод Col1apse объекта Selection.

Методы и свойства интерфейса _Application почти полностью соответствуют функциям языка Visual Basic for Application (VBA), который используется в приложениях MS Office для созданиям макросов.

В рассмотренном примере используется раннее связывание с сервером автоматизации, и корректность вызова методов сервера проверяется на этапе компиляции. Такой подход является более прогрессивным по сравнению с методом позднего связывания, так как позволяет выявлять ошибки во время компиляции. Однако при этом требуется импортировать библиотеки типов, которые не всегда поставляются с сервером автоматизации.

<== предыдущая лекция | следующая лекция ==>
Пример использования позднего связывания | Компоненты Delphi для взаимодействия с серверами автоматизации MS Office
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 264; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.