Разработка интегрированных прикладных программ (Меньшикова К. Г.) (Разработка интегрированных прикладных программ (Меньшикова К. Г.))

Посмотреть архив целиком

Workbs=AppE.OlePropertyGet("Workbooks");
Workb=Workbs.OlePropertyGet("Item",1);
Workshs=Workb.OlePropertyGet("Worksheets") ;
Worksh=Workshs.OlePropertyGet("Item",2);

Для добавления нового объекта к коллекции (например, рабочей книги) используется процедура Add, для вызова которой придется использовать метод OleProcedure: Workbs.OleProcedure("Add");

Для изменения свойств используется метод OlePropertySet:

AppE.OlePropertySet("Visible",true);
Workshs.OlePropertyGet("Item",1).OlePropertySet ("Name","
Исходная таблица");

Доступ к ячейкам таблицы организуется совместной работой методов:

// запись значения в ячейку (числа или формулы)
Worksh.OlePropertyGet("Cells").OlePropertyGet
("Item",3,1).OlePropertySet("Value",-34);
Worksh.OlePropertyGet("Cells").OlePropertyGet
("Item",11,1).OlePropertySet ("Value","=СУММ(A1:A10)");
// оформление ячейки таблицы
work=Worksh.OlePropertyGet("Cells").OlePropertyGet
("Item",3,2);
work.OlePropertyGet("Font").OlePropertySet
("Color",clBlue);
work.OlePropertyGet("Font").OlePropertySet
("Bold",true);

Для организации позднего связывания c MS Word также понадобятся переменные типа Variant: AppW (объект Application), WordDs (коллекция документов WordDocuments), WordD (документ Document), WordPars (коллекция Paragraphs), Rng (объект Range).

После создания приложения-сервера AppW=CreateOleObject ("Word.Application"); доступ к его свойствам (среди свойств есть и такие, которые представляют коллекции других объектов) можно получить через функцию OlePropertyGet:

WordDs=AppW.OlePropertyGet("Documents");
WordD=AppW.OlePropertyGet("ActiveDocument");
WordPars=WordD.OlePropertyGet("Paragraphs");

Для установки значений свойств используется OlePropertySet:

AppW.OlePropertySet("Visible",true);
AppW.OlePropertySet("Width",200);

Для доступа к конкретному объекту коллекции документов или параграфов используется функция OleFunction, а для создания новых объектов необходимо использовать метод OleProcedure, например:

WordD = WordDs.OleFunction ("Item",2);
WordDs.OleProcedure("Add");
WordPars.OleProcedure("Add");

Для работы с документом потребуется сочетание перечисленных функций и методов:

//получение количества документов и активизация документа
int j=(int) (WordDs.OlePropertyGet("Count"));
WordD =WordDs.OleFunction ("Item",2).OleProcedure
("Activate");
// доступ к частям документа
Rng=WordD.OleFunction("Range",10,15);
Rng= WordPars.OleFunction ("Item",1).
OlePropertyGet("Range");
// вставка текста в документ
Rng.OleProcedure("InsertBefore","Текст 1");
WordPars.OleFunction("Item",1).OlePropertyGet("Range").

OleProcedure("InsertAfter","
Текст 33");
//
изменение цвета букв
Rng.OlePropertyGet("Font").OlePropertySet("Color",clRed);

    1. Работа с серверами из Delphi (позднее связывание)

При создании контроллеров позднего связывания на Delphi следует обратить особое внимание на различия в синтаксисе обращений к членам коллекций объектов Excel и Word: в случае MS Word используется метод Item, в Excel члены коллекции рассматриваются как элементы массивов. В предыдущем параграфе было показано, что в С++Builder различие офисных серверов сказалось на использовании различных функций.

При работе с MS Excel доступ к объектам можно организовать так:

AppE:=CreateOleObject('Excel.Application');
WorkBs:=AppE.Workbooks;
WorkSh:=AppE.Workbooks[1].WorkSheets[2];
WorkSh:=AppE.ActiveWorkBook.WorkSheets[2];

Методы серверных объектов можно вызывать обычным образом:

WorkBs.Add; AppE.Quit;
AppE.Workbooks[2].Activate; AppE.WorkBooks[2].Close;
AppE.ActiveWorkBook.Close(True,'D:\Work1.xls');

Последний пример хорошо иллюстрирует еще одно преимущество позднего связывания. Метод Close на самом деле имеет несколько параметров, но поскольку компилятор в данном случае не проверяет правильность обращений контроллера, то можно закрыть рабочую книгу, используя параметры по умолчанию.

Задание свойств объектов не отличается от случая обычных компонентов AppE.Visible:=true; Worksh.Name:='Результаты';

К ячейкам таблицы можно обращаться как к элементам двумерного массива, а группу ячеек задает свойство Range:

Worksh.Cells[1,2].Value:=25;
Worksh.Cells[1,2].Font.Name:='Arial';
AppE.WorkBooks[1].WorkSheets[3].Range['B2:C4'].Value:='5';

В случае контроллера MS Word доступ к объектам выглядит несколько иначе:

WordDs:=AppW.Documents; WordD:=WordDs.Item(1);
WordPar:=WordD.Paragraphs.Item(3);

Перед вызовом методов объекта коллекции также приходится предварительно обращаться к методу Item:

AppW.Documents.Item(2).Activate;

Работа с текстом может осуществляться так:

// вставка текста после указанного абзаца
Rng:= AppW.ActiveDocument.Paragraphs.Item(1).Range;
Rng.InsertAfter(‘Новый текст’);
Rng.Copy; // копирование фрагмента текста
AppW.Documents.Item(1).Paragraphs.Item(2).Range.Paste;
// вставка текста после символов:
WordD.Range(6,8).InsertAfter('Текст 2');

  1. Элементы управления ActiveX

    1. Создание ActiveX на основе компонентов VCL

Для демонстрации создадим управляющий элемент на основе компонента TMonthCalendar:

  • открыть окно галереи объектов и создать пустую библиотеку, выбрав значок ActiveX Library на странице ActiveX. Сохранить проект (например, MC_Project.dpr);

  • добавить в созданную библиотеку элемент управления, выбрав значок ActiveX Control и заполнить поля диалогового окна ActiveX Control Wizard: VCL Class Name (выбрать TMonthCalendar), New ActiveX Name (предложено MonthCalendarX), Implementation Unit;

  • сохранить, скомпилировать проект и зарегистрировать ActiveX в реестре.

Для регистрации используется команда Run | Register ActiveX Server, и будет получено сообщение: Successfully registred ActiveX Server, ‘D:\ActiveX\Delphi – ActiveX\ MC_Project.ocx’. В папке проекта можно видеть, что кроме самого элемента ActiveX (файл MC_Progect.ocx), создана его библиотека типов (файл MC_Project.tlb).

    1. Тестирование ActiveX

Лучшим средством для тестирования элементов управления являются инструментарии фирмы Microsoft, так как спецификация элементов управления создавалась, в первую очередь, в расчете на эти средства разработки. К тому же проверять работоспособность созданного элемента лучше в среде, отличной от среды его создания. Для созданного нами элемента можно использовать Visual Basic, Visual C++, а проще всего Visual Basic for Applications (Microsoft Word или Excel).

Тестирование с использованием VBA

  • Запустить Microsoft Excel (Word), создать и сохранить документ, войти в редактор VBA.

  • В окне проекта (Project) выделить имя документа и выбрать меню команду Insert | User Form.

  • В контекстном меню панели элементов (toolbox) выбрать команду Additional Controls и в открывшемся списке всех зарегистрированных управляющих элементов выбрать MonthCalendarX Control.

  • Поместить элемент управления на форму и в окне Properties изменить его свойства (при необходимости или для проверки).

  • В документе создать кнопку Button1 и в связанную с ней процедуру CommandButton1_Click добавить строку UserForm1.Show, проверить ее работу.

    1. Создание активных форм

Активная форма (ActiveForm) – это способ создания ActiveX, содержащего несколько VCL-компонент. Можно использовать практически любые компоненты (исключением является TMainMenu). Создадим, например, в Builder C++ управляющий элемент, который будет по заданной дате определять день недели. Порядок создания почти такой же, как у обычного приложения:

  • в галерее объектов выбрать ActiveForm (страница ActiveX) и ввести имя создаваемого элемента (например, Day_AFX);

  • сохранить проект DayAFProj1 в отдельной папке;

  • разместить на форме компоненты Image1 (фоновая картинка), Edit1 (поле ввода даты), Label1 (поле для вывода дня недели), Label2 и Label3 – вспомогательные надписи;

  • в модуле формы Day_AFImpl1.cpp (в модуле .h объявлен класс TDay_AFX с базовым классом TActive Form) объявить символьный массив: char days[7][15] = {"Воскресенье ", "Понедельник", "Вторник", "Среда","Четверг", "Пятница", "Суббота "};

  • написать код обработчиков событий. Например, по щелчку на кнопке должен выводиться день недели для заданной даты:

void __fastcall TDay_AFX::Button1Click(TObject *Sender)
{ TDateTime dtDate = StrToDate(Edit1->Text);
Label1->Caption=(AnsiString)( days[dtDate.
DayOfWeek()- 1]);}

При создании окна управляющего элемента можно, например, вывести текущую дату и день недели:

void __fastcall TDay_AFX::ActiveFormCreate(TObject *Sender)
{Label1->Caption=(AnsiString)
(days[DayOfWeek(Date()) - 1]);
Edit1->Text=DateToStr(Date());}

После создания активную форму следует скомпилировать и зарегистрировать, как и обычный ActiveX.

Тестирование также можно провести как с любым ActiveX, а можно, например, сгенерировать в Builder C++ тестовую HTML-страницу и для ее отображения использовать Microsoft Internet Explorer. Для этого в меню выбрать команду Project | Web Deployment Options.

Добавление свойств и методов

К созданным элементам управления можно добавлять собственные свойства и методы, редактируя для этого библиотеку типов и добавляя в модули соответствующую реализацию. Для демонстрации этой возможности создадим, например, в Delphi новую активную форму с именем класса CountClickX. Разместим на форме кнопку Button1, надпись Label1 (Caption:=«Количество нажатий») и надпись Label2.


Случайные файлы

Файл
ref-16069.doc
175400.rtf
EGIPET.doc
90606.rtf
133251.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.