08:12 Подключение в приложение и активизация серверов автоматизации OLE | |
С программами Microsoft Office Word, Excel и другими можно работать как с объектами автоматизации OLE. Этот подход существенно отличается от работы с этими программами как с серверами СОМ или от использования компонентов страницы Servers. Работа с объектами автоматизации может быть организована двумя способами: через библиотеки типов и через механизм автоматизации OLE. Использование библиотеки типов имеет то преимущество, что обеспечивает проверку типов. Но для работы с библиотекой типов надо сформировать соответствующий файл и разобраться в нем. Компиляция программ, включающих объект через библиотеку типов, требует заметных затрат времени. По этим причинам мы в дальнейшем этот путь рассматривать не будем. Использование автоматизации OLE применительно к Word и Excel проще, поскольку в эти программы встроена справка по VBA, содержащая описание всех объектов, свойств и методов. Так что разработчик просто получает возможность работать с ними из приложения Delphi. Основные отличия при использовании автоматизации OLE от работы с серверами СОМ заключаются в следующем. Задание свойств и методов в серверах автоматизации OLE, как будет показано в следующем раздел, намного удобнее. Во-первых, в серверах автоматизации OLE при вызове методов не требуется задание значений необязательных параметров, что существенно упрощает многие операторы. Во-вторых, параметры методов можно задавать в форматах "имя := значение", причем последовательность задания параметров безразлична. Это дополнительное удобство, так как не требуется помнить последовательность параметров в объявлении метода. К тому же, не требуется переводить все значения параметров в тип OleVariant, обязательный для серверов СОМ. Еще одним преимуществом серверов автоматизации OLE является то, что вызываемые методы очень близки к их описанию в справке по VB соответствующей программы Microsoft Office. В серверах СОМ в некоторых случаях наблюдаются отличия. Это все достоинства использования серверов автоматизации OLE. Но есть, к сожалению, и недостаток. Он заключается в том, что при работе в среде Delphi с серверами автоматизации не срабатывают подсказки свойств и методов, которые прекрасно работают с серверами СОМ. Это, конечно, несколько усложняет программирование. И все-таки в целом, как мне представляется, использовать серверы автоматизации OLE в большинстве случаев проще, чем работать с серверами СОМ. Приложение, использующее сервер автоматизации OLe, должно содержать ссылку на модуль ComObj: uses ..., ComObj; Модуль ComObj необходим для работы с любыми объектами OLE. Помимо этого, в приложение могут быть добавлены ссылки на модули WordXP, Word2000, Word97 при работе с Word, или ссылки на модули ExcelXP, Excel2000, Excel97 при работе с Excel. В этих модулях описаны различные константы, используемые для задания значений методов. Если такие константы не требуются, эти модули можно не подключать. Работа с сервером автоматизации Word может строиться следующим образом: uses ..., ComObj, WordXP; Переменная WordApplicationl связывается с экземпляром Word функцией CreateOleObject, которая в приведенном примере вызывается в обработчике события OnCreate формы. Эта функция создает новый объект класса, указанного ее аргументом, и возвращает ссылку на идентификатор интерфейса типа IDispatch, используемый для связи с объектом. Таким образом, приведенный оператор запускает новый экземпляр Word, с которым в дальнейшем будет проводиться работа. Если желательно не создавать новый экземпляр Word, а подключиться к уже выполняющемуся на компьютере, то вместо приведенного выше оператора следует выполнить оператор: WordApplicationl := GetActiveOleObject('Word.Application'); Функция GetActiveOleObject выполняет функции, аналогичные CreateOleObject, но отличается тем, что соединяется с уже выполняющимся экземпляром программы. Если выполняющегося зарегистрированного объекта OLE нет или объект не имеет интерфейса IDispatch, генерируется исключение OleSysError. Таким образом, если желательно соединиться с выполняющимся экземпляром Word, а при его отсутствии создать новый экземпляр, это можно сделать следующим образом: try Созданный экземпляр Word по умолчанию невидим, т.е. работа с ним будет проводиться «за кадром» — пользователь его не увидит. Оператор, задающий значение true свойству сервера Visible, делает окно сервера видимым. Если после проведения каких-то операций вы хотите завершить выполнение Word, надо выполнить оператор WordApplicationl.Quit;который в приведенном примере помещен в обработчик события OnDestroy формы. Аналогичным образом может организовываться работа с сервером автоматизации Excel: uses ComObj, ExcelXP; | |
|
Всего комментариев: 0 | |