- •Разработка интегрированных прикладных программ
- •Введение
- •Интерфейсы в Delphi
- •Присоединение интерфейсов к формам
- •Объекты com
- •Контроллер позднего связывания (Delphi)
- •Контроллер на основе библиотеки типов (Delphi)
- •Контоллер на vba
- •Управление офисными приложениями
- •Ms Excel и компоненты библиотеки vcl
- •Работа с ячейками таблицы
- •Серверы ms Office и позднее связывание
- •Работа с серверами из Delphi (позднее связывание)
- •Элементы управления ActiveX
- •Создание ActiveX на основе компонентов vcl
- •Тестирование ActiveX
- •Тестирование с использованием vba
- •Создание активных форм
- •Добавление свойств и методов
- •Динамическое создание элементов управления ActiveX
- •Компонент oleContainer
- •Создание и сохранение нового объекта (внедрение)
- •Создание связанного объекта
- •Работа с сервером
- •Библиографический список
- •Оглавление
Контоллер на vba
Идеальным контроллером автоматизации является Excel. Конечно, можно использовать и любое другое офисное приложение, однако удобнее и быстрее всего осуществить проверку работоспособности сервера можно именно в Excel.
Для проверки сервера можно на рабочий лист рабочей книги поместить кнопки, как это показано на рис. 4, подготовить текст (жирный шрифт) и ввести дату в ячейку “F10”. Затем перейти в редактор Visual Basic и создать обработчики для кнопок.
Для организации позднего связывания можно просто объявить переменную – объект для связи с сервером: Dim Serv As Object
Остальной код будет выглядеть так:
создание объекта автоматизации
Set Serv = CreateObject("Project_DayWeek.DayWeek")
Рис. 4
прерывание связи Set Serv = Nothing
работа со свойством Visible
Serv.Visible = Range("C6").Value (установить) Range("C6").Value = Serv.Visible (получить)
для получения данных придется объявить специальные переменные: Dim str As String
Call Serv.Today(str) Range("G5").Value = str
для передачи значения можно использовать ячейки рабочего листа:
Dim i As Long Dim str As String Call Serv.Data_Day(Range("F10").Value, i, str) Range("H10").Value = i Range("G10").Value = str
Для использования библиотеки типов пользователь или автор рабочей книги, войдя в редактор Visual Basic, должен выбрать в меню команду Tools | References…, а в появившемся списке установить флажок на Project_DayWeek Library (список всех библиотек типов Excel считывает при загрузке из раздела реестра TypeLib). После этого пользователь может просматривать методы и свойства сервера, выбрав в меню команду View | Object Browser.
Если после этого объявить переменную Serv, как ссылку на соответствующий интерфейс (Dim Serv As IDayWeek), то программный код будет использовать библиотеку типов.
Управление офисными приложениями
Практически все, что может сделать пользователь, работая с приложениями MS Office, доступно для автоматизации. Для управления сервером, конечно, необходимо знать, какие объекты, свойства и методы предоставлены разработчиками сервера для автоматизации. Эти сведения содержатся обычно в документации, в справочной системе или в литературе.
Необходимую информацию можно получить также из библиотеки типов сервера. В Delphi или C++ Builder для этого можно воспользоваться командой импорта библиотеки типов сервера, например, для Excel 2000 в списке библиотек можно увидеть строку: Microsoft Excel 9.0 Object Library. После ее выбора будут созданы файлы с описанием имеющихся объектов (для С++Builder файлы Excel_TLB.cpp и Excel_TLB.h, а для Delphi файл Excel_TLB.pas). Файлы размещаются в (системной) папке, например, C:\ ProgramFiles\ Borland\ Delphi6\ Imports.
Для управления серверами удобнее всего воспользоваться компонентами визуальной библиотеки. Однако для этого требуется предварительное знакомство с офисными объектами и проведение программных экспериментов.
Ms Excel и компоненты библиотеки vcl
С++Builder и Delphi поддерживают работу со многими распространенными приложениями, предлагая программистам соответствующие компоненты. Офисные компоненты чаще всего располагаются на странице Servers (хотя возможно, что в названии используется номер офисной версии). В любом случае при разработке сложных приложений надо решить вопрос совместимости версий Windows, Microsoft Office и инструментариев разработки, иначе переносимость таких приложений может быть очень ограничена.
Компонент ExcelApplication задает приложение Excel, его свойства, методы и события характеризуют приложение в целом. Его свойство Workbooks определяет коллекцию рабочих книг (все открытые в приложении рабочие книги).
Компонент ExcelWorkbook задает рабочую книгу и, в свою очередь, имеет свойство Worksheets – все рабочие листы книги. Компонент Worksheet – это конкретный лист рабочей книги.
Установить связь с физическим объектом можно так:
ExcelApplication1->Connect(); ExcelWorkbook1-> ConnectTo (ExcelApplication1 -> ActiveWorkbook); ExcelWorksheet1 -> ConnectTo (ExcelWorkbook1-> ActiveSheet); ExcelWorksheet2 -> ConnectTo (ExcelWorksheet1 -> get_Next());
Для вызова некоторых методов и свойств используется специальная константа - LOCALE_SYSTEM_DEFAULT (lcid); ее значение равно 0. Например, можно сделать окно Excel видимым (или невидимым, если параметр равен false):
#define lcid LOCALE_SYSTEM_DEFAULT ExcelApplication1->set_Visible(lcid,true);
При работе с коллекцией Workbooks можно обращаться к ее свойствам, например, узнать количество открытых книг
int n= ExcelApplication1-> Workbooks-> Count;
и методам, например, открыть и добавить новую книгу
WideString filename="d:/work.xls"; ExcelApplication1->Workbooks->Open(filename); ExcelApplication1->Workbooks -> Add();
Сохранить рабочую книгу или сделать рабочий лист активным можно с помощью соответствующих компонент:
ExcelWorkbook1->Save(lcid); ExcelWorksheet2 ->Activate (lcid);
При работе с офисными компонентами используется раннее связывание. Компилятор, конечно, четко отслеживает типы передаваемых параметров. Однако иногда необходимо или удобно его “обмануть”, упаковав данные в формат TVariant. Например, зададим имена листов:
WideString str; str="MyList 1"; ExcelWorksheet1->set_Name(str); ExcelWorksheet2->set_Name((TVariant)"MyList 2");