Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка интегрированных прикладных программ (Меньшикова К. Г.).doc
Скачиваний:
34
Добавлен:
28.06.2014
Размер:
321.02 Кб
Скачать

Тестирование с использованием 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.

Пусть управляющий элемент запоминает и отображает число щелчков на Button1, а также посылает уведомление контейнеру о произведенном нажатии кнопки. Для посылки уведомлений необходимо добавить новый метод в интерфейс ICountClickXEvents, который содержит прототипы методов исходящего (нотификационного) интерфейса контейнера. В окне библиотеки типов выбрать данный интерфейс и, нажав кнопку New Method, ввести его имя (например, OnButton). На странице Parameters указать тип возвращаемого значения (Return Type) void и, если требуется, добавить (кнопка Add) параметры обработчика. Вызов OnButton следует добавить в код управляющего элемента, тогда процедура, отвечающая за щелчок на кнопке, может выглядеть следующим образом:

procedure TCountClickX.Button1Click(Sender: TObject); var i :integer; begin i:=StrToInt(Label2.Caption)+1; Label2.Caption:=IntToStr(i); if FEvents<>nil then FEvents.OnButton; end;

Данный метод увеличивает и визуализирует число щелчков, а также проверяет наличие реализации нотификационного интерфейса у клиента (контейнера). При наличии такой реализации вызывается метод OnButton.

Для добавления нового свойства воспользуемся тем же окном библиотеки типов и к интерфейсу IСountClickX добавим свойство Count (кнопка New Property). Щелкнув в редакторе библиотеки типов Refresh Implementation, получим заготовку методов и добавим в них необходимый код:

function TCountClickX.Get_Count: Integer; begin Result:=StrToInt(Label2.Caption); end; procedure TCountClickX.Set_Count(Value: Integer); begin Label2.Caption:=IntToStr(Value); end;

При создании подобного элемента управления в среде Builder C++ код методов выглядит несколько сложнее. Например, функции для получения и записи значения свойства Count могли бы быть следующими:

STDMETHODIMP TClickCountCXImpl::get_Count(long* Value) { AnsiString s; try {s=m_VclCtl->Label2->Caption; *Value =StrToInt64(s); } catch(Exception &e) {return Error(e.Message.c_str(), IID_IClickCountCX); } return S_OK; };

Свойству Count при создании был присвоен диспетчерский идентификатор 16, а для организации правильной обработки при задании нового значения свойства - проверяется соответствие идентификаторов:

STDMETHODIMP TClickCountCXImpl::set_Count(long Value) {try { const DISPID dispid = 16; if (FireOnRequestEdit(dispid) == S_FALSE) return S_FALSE; m_VclCtl->Label2->Caption=IntToStr(Value); FireOnChanged(dispid); } catch(Exception &e) {return Error(e.Message.c_str(), IID_IClickCountCX);} return S_OK; };

После компиляции и регистрации ActiveX можно закрыть проект, а затем перейти к проверке его работоспособности.

Тестирование элемента управления в Builder C++

Создадим новое Builder-приложение (рис. 5). Командой Component | Import ActiveX Control поместим элемент управления на палитру компонент (по умолчанию он отобразится на странице ActiveX). После этого используем его как любой VCL-компонент (настроим свойства и создадим обработчики).

Рис. 5

Для проверки ActiveX создадим обработчик события OnButton, добавим в него код, учитывающий число полученных уведомлений, а также будем обнулять число щелчков в управляющем элементе, если оно достигнет какого-то критического значения (для проверки возьмем 10) путем изменения значения свойства Count. Вот код созданного обработчика:

void __fastcall TForm1::CountClickX1Button(TObject *Sender) { static int msg=0; msg++; Label2->Caption=IntToStr(msg); if (CountClickX1->Count ==10) CountClickX1->Count=0; }