Переменная IE типа Variant не имеет никаких свойств и методов, но, тем не менее, программа откомпилируется и будет выполняться. Если мы вместо свойства Visible напишем любое другое свойство, которое не поддерживает IE, то компилятор ошибки не выдаст, а на стадии выполнения произойдет ошибка. Это особенности позднего связывания — свойства и методы проверяются в самом приложении-сервере на стадии выполнения. Можно добавить, что весь этот механизм работает за счет COM API. В данной книге нет смысла подробно рассматривать вызовы его функций и процедур. Наша задача — научиться создавать и использовать контроллеры автоматизации (что это такое, рассказано чуть позже) для приложений MS Office Word и Excel, которые наиболее часто используются как приложения для пользователей и как серверы для создания приложений. Используя контроллеры автоматизации, в приложениях, созданных в среде Delphi, можно так же просто, как при обычной работе с Word и Excel, создавать документы со всеми возможными элементами. Таблицы, надписи, текст, диаграммы и другие компоненты полноценных документов появятся в таком виде, как будто они созданы пользователем. Далее в книге все примеры будут описывать в основном только работу с Word и Excel и позднее связывание.
Среда разработки приложений Delphi предоставляет программистам массу возможностей по созданию приложений, способных взаимодействовать с внешними программами, такими как Word, Excel, Internet Explorer, Outlook и другими, использующими механизмы Windows для обмена данными. Даже ранние версии Delphi поддерживали технологию DDE и OLE. Начиная с пятой версии Delphi, возможности были дополнены целым набором компонентов для работы с приложениями MS Office. Благодаря странице Servers Палитры компонентов, разработчик получил возможность достаточно быстро создавать для своих приложений отчеты в формате Word, Excel, работать с почтовой программой и другими приложениями MS Office. Страница Servers содержит компоненты для работы с приложениями Word, Excel, документами и рабочими книгами и компоненты для работы с текстом. На рис. 4.1 показан внешний вид страницы Servers.
В данной главе мы приступим к практическому созданию контроллера автоматизации для текстового редактора MS Word. Как уже сказано, для создания контроллера автоматизации необходимо получить доступ к объекту, стоящему на вершине объектной модели приложения Word, — к объекту Application (для доступа к нему используется идентификатор Word.Application).
Если выполнить этот фрагмент программы, то приложение Word запустится, но его окно не отобразится на экране монитора. В память компьютера будет загружен объект Application, обеспечивающий доступ ко всем внутренним объектам, коллекциям и свойствам. В данный момент нас интересует только одно свойство этого объекта — Visible. Если его значение установить в True, то окно приложения Word станет видимым. Расположим в нашей форме компонент СheckBox1, в процедуре отклика которого напишем следующий программный текст:
Манипулируя состоянием объекта CheckBoxl, мы обнаружим, что окно приложения то появляется, то пропадает с экрана монитора. Приложение загружено в память, без каких-либо открытых документов {рис. 5.1).
Рис. 5.1. Отображенное окно запущенного приложения Word
Итак, объект Application загружен в память компьютера, и у нас есть доступ к нему через переменную W:variant. Исследуем свойства этого объекта. Обратим внимание на коллекцию Documents. Она содержит документы, их свойства и методы для работы с ними. Элементами коллекции являются открытые в настоящий момент документы. Доступ к ним осуществляется через объекты ltem(doc:variant), где doc — имя или индекс документа в коллекции. Поле Count коллекции содержит количество элементов коллекции, если Count=0, то нет ни одного открытого документа. Создадим новый документ, Для этого используем метод ADD этой же коллекции. Разместим в форме кнопку, в процедуру отклика которой на нажатие запишем следующий текст: