Легкая часть - написание .cpp файла. Сначала давайте напишем код мутаторов:
//---------------------------------------------------------------------------
void __fastcall TLED::SetOnOff(const bool Value)
{
FOnOff = Value; // Set the state of FOnOff
Brush->Color = (FOnOff)?FOnColour:FOffColour;
}
//---------------------------------------------------------------------------
void __fastcall TLED::SetOnColour(const TColor OnColour)
{
FOnColour = OnColour;
Brush->Color = (FOnOff)?FOnColour:FOffColour;
}
//---------------------------------------------------------------------------
void __fastcall TLED::SetOffColour(const TColor OffColour)
{
FOffColour = OffColour;
Brush->Color = (FOnOff)?FOnColour:FOffColour;
}
//---------------------------------------------------------------------------
Легче не бывает :)) Теперь надо написать конструктор. В нем будут устанавливаться значения по умолчанию, которые будут видны в object inspector:
__fastcall TLED::TLED(TComponent* Owner)
: TShape(Owner)
{
Width = 15; // Установим ширину нашего LED в 15.
Height = 15; // Установим высоту нашего LED в 15.
FOnColour = clLime; // Установим OnColour лимонно-зеленым.
FOffColour = clRed; // Установим OffColour красным.
FOnOff = false; // Сосотояние по умолчанию - выключено
Shape = stEllipse; // Форма по умолчанию - эллипс
Pen->Color = clBlack; // Цвет пера - черный
Pen->Width = 1; // Толщина пера 1
Brush->Color = FOffColour; // Цвет кисти одинаков с цветом по умолчанию
}
Опять все достаточно прозрачно. Эти значения будут установлены, когда компонент поместят на форму и при этом автоматически будет вызван конструктор.
Несмотря на это, мы можем менять эти значения и во время проектирования, а не только во время выполнения.
Замечание: существует несколько способов инициализации переменных в конструкторе. Вышеприведенный пример можно было написать и так:
__fastcall TLED::TLED(TComponent* Owner)
: TShape(Owner),
FOnColour(clLime), // установить OnColour в лимонно-зеленый
FOffColour(clRed) // установить OffColour красным
{
Width = 15; // Установим ширину нашего LED в 15.
Height = 15; // Установим высоту нашего LED в 15.
Shape = stEllipse; // Форма по умолчанию - эллипс
Pen->Color = clBlack; // Цвет пера - черный
Pen->Width = 2; // Толщина пера 2
Brush->Color = FOffColour; // Цвет кисти одинаков с цветом по умолчанию
}
А можно и так:
__fastcall TLED::TLED(TComponent* Owner)
: TShape(Owner), FOnColour(clLime), FOffColour(clRed), Width(15),
Height(15), Shape(stEllipse), Pen->Width(2),Brush->Color(FOffColour)
{}
Также важно понимать, что fOnOff инициализировать не обязательно, так как тип bool имеет встроенное значение по умолчанию(false), в отличие от большинства простых типов C++, которые автоматически не инициализируются.
Тем не менее, считается хорошим стилем инициализировать значения всех свойств.
|