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

Ознакомившись с заготовками программного модуля компоненты, которые создал для нас 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> //____----------__________________________________------—

classTLED : publicTShape {private:

bool FOnOff;TColor FOnColor; TColor FOffColor;

void _fastcall SetOnOff(const bool Value) ;

void _fastcall ' SetOnColor

void _fastcall SetOffColor (conet TColor OffColor) ;

protected:

public:

_fastcallTLED(TComponent* Owners-published:

propertybool LEDOn= { read= FOnOff,write= SetOnOff) ;propertyТСоlог OnColor= { read=FOnColor,write=SetOnColor} ; :.,. __propertyTColor 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 _fastcallTLED::SetOnOf?(const boolValue) {

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 модуля компоненты.

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

Наши рекомендации