Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Использование и создание визуальных компонент 6....doc
Скачиваний:
4
Добавлен:
08.07.2019
Размер:
236.54 Кб
Скачать

6.8.3 Члены данных, свойства и методы

Ознакомившись с заготовками программного модуля компоненты, которые создал для нас C++Builder, можно приступить к написанию собственно кода компоненты. Прежде всего, в файле LED.h опишем булеву переменную состояния индикатора и две переменные перечисляемого типа TColor для хранения цветов, отображающих оба состояния. Из главы 3 об основах объектно-ориентированного программирования мы знаем как ограничивать область видимости и уяснили, что эти члены данных следует спрятать в секции private объявлений класса. Там же расположим прототипы функций записи соответствующих свойств, а сами свойства объявим в секции _published (Листинг 6.15).

//---------------________________________________-_____-_--

#ifndef LEDH

#define LEDH //------------_____-_____--_________________________-___--.

#include <vcl\SysUtils.hpp>

#include <vcl\Controls.hpp>

#include <vcl\Classes.hpp>

#include <vcl\Forms.hpp> ^include <vcl\ExtCtrls.hpp> //____----------__________________________________------—

class TLED : public TShape { private:

bool FOnOff; TColor FOnColor; TColor FOffColor;

void _fastcall SetOnOff(const bool Value) ;

void _fastcall ' SetOnColor

void _fastcall SetOffColor (conet TColor OffColor) ;

protected:

public:

_fastcall TLED(TComponent* Owners-published:

property bool LEDOn= { read= FOnOff,write= SetOnOff) ; property ТСоlог OnColor= { read=FOnColor,write=SetOnColor} ; :.,. __property TColor OffColor=

{ read=FOff Color, write= SetOffColor} ;

};

//_____________-___-_----____________------------------——

#endif

Листинг 6.15. Добавления в файл LED.h модуля компоненты.

Еще проще окажутся добавления в файл LED.cpp (Листинг 6.16). Необходимо написать три функции для присвоения значений свойств соответствующим членам данных, а также наполнить конструктор компоненты инструкциями для инициализации переменных.

#include <vcl\vcl.h>

#pragma hdrstop

# include "LED.h" //_-------—----—-____--------—---.————---—---—----—--

static inline TLED *ValidCtrCheck() {

return new TLED(MULL) ;

)

void _fastcall TLED::SetOnOf?(const bool Value) {

POnOff = Value;

Brush->Color ” (POnOff) ? FOnColor : POffColor?

}

//_———————————————-——-^-.-——.————.——————

void _fastcall TLED::SetOnColor(const TColor OnColor) {

POnColor = OnColor;

Brush->Color = (FOnOff) ? FOnColor : FOffColor;

}

//-—---——-„--—--------————----------——--———---—--

void _fastcall TLED::SetOЈfColor(const TColor OffColor) {

FOffColor = OffColor;

Brush->Color = (FOnOff) ? FOnColor : FOffColor;

}

//---_------------------------------------------------------

_fastcall TLED::TLED(TComponent* Owner) : TShape(Owner)

{

Width = 15; // тирина по умолчанию Height = 15; // высота по умолчанию FOnColor = cILime; // зеленый, когда включен FOffColor = cIRed; // красный, когда выключен FOnOff = false; // выключен по умолчанию Shape ? atEllipse; //в форме эллипса по умсвдчани Pen->Color = clBlack; // черный контур по умолчанию Pen->Width = 2; // ширина контура по уйолчанию Brush->Color ^ FOffColor; // цвет заливки по умолчанию

}

//---------------____-______________________--________.

namespace Led

{

void _fastcall Register () {

TComponentClass classes[1] = {__classid(TLED)} ;

RegisterComponents("Samples", classes, 0) ;

} }

Листинг 6.16. Добавления в файл LED.cpp модуля компоненты.

Установленные конструктором значения членов данных по умолчанию па вятся в окне Инспектора объектов при создании объекта индикатора. Дейстительно, при помещении компоненты на форму конструктор вызывается автоматически. В результате появляется возможность менять значения свойств компоненты не только во время выполнения программы, но и на стадии проектирования приложения. *

6.8.4 Испытание компоненты

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

=> С помощью команды File | Save All сохраните все сделанные добавления. => Выбрав вкладку LEDForm.cpp в окне Редактора кода, по команд File | Include Unite Hdr включите строку #include "LED. h" в заголовок файла формы. По неведомой причине, эта команда не работает с файлом LEDForm.h, поэтому строку #include "LED.h" приходится вставлять вручную. К секции private этого же файла добавьте описание объекта индикатора:

private: // User declarations TLED* LED1;

=> Активизируйте форму Formi и в окне Инспектора объектов дважды щелкните мышью в графе значений события OnCreate. С помощью Редактора кода введите обработчик этого события в файл LEDForm.cpp. Следующий код создаст компоненту TLED динамически (определяя ее родителя Parent и помещая в в центре родительской формы) во время выполнения тестового приложения:

void_fastcall TFormI::FormCreate(TObject *Sender)

t

LED1 = new TLED(this);

LED1->Parent = this;

// Центрировать компоненту по ширине формы LEDl->Left = (Width/2)-(LEDl->Width/2);

// Центрировать компоненту по высоте формы LEDl->Top = (Height/2)-(LEDl->Height/2);

}

Чтобы кнопка управляла индикатором, дважды щелкните мышью в графе значений события OnClick объекта Buttoni в окне Инспектора объектов. С помощью Редактора кода введите следующую инструкцию в тело обработчика события:

void_fasfccall TPormI::ButtonlClick(TObject *Sender) (

LEDl->LEDOn = !LEDl->LEDOn;

}

=> Наконец, скомпилируйте и запустите тестовое приложение посредством команды Run | Run.

Если компилятор не выдаст ошибок (а их не должно быть, если вы точно следовали изложенной процедуре), то посередине формы тестового приложения вы увидите красный индикатор в состоянии "выключен". Нажав кнопку, вы включите индикатор и он окрасится зеленым цветом (Рис. 6.10).

Теперь осталось создать битовый образ пиктограммы, которой новая компонента будет представлена в Палитре. Из меню редактора изображений, открывающегося по команде Tools | Image Editor, выберите File | New | Resource File, a затем - Resource | New) Bitmap.

В диалоге свойств битового образа установите размеры пиктограммы 24х24 и число цветов VGA (16 Colors). Переименуйте битовый образ компоненты (TLED) по команде Resourse | Rename и дважды щелкните мышью на выбранном имени в древовидном списке ресурсных файлов, чтобы нарисовать подходящую картинку индикатора (например, зеленый кружок). Командой File | Save As сохраните ресурсный файл LED.res в своем рабочем каталоге и закройте Редактор изображений.

Рис. 6.10. Динамическое создание компоненты индикатора.