 
        
        - •Разработка интегрированных прикладных программ
- •Введение
- •Интерфейсы в 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");
