Теперь давайте взглянем на .h файл, созданный Билдером.
Если этого еще не сделано, зайдите в редактор и выберите соответствующую закладку.
На экране появится содержимое LED.h (если вы используете C++Builder v1, там не будет макроса PACKAGE):
//-----------------------------------------------------------------
#ifndef LEDH
#define LEDH
//-----------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//-----------------------------------------------------------------
class PACKAGE TLED : public TShape
{
private:
protected:
public:
__fastcall TLED(TComponent* Owner);
__published:
};
//-----------------------------------------------------------------
#endif
Да, не очень-то много. Только множество включений файлов, которые пришлось бы делать вручную.
Теперь надо кое-что написать самим в дополнение к скелету, соданному Билдером.
Нам будет нужна булева переменная для хранения статуса и специальные переменные для хранения цветов обоих состояний индикатора.
Тип bool подойдет для статуса, а для хранения цвета имеется специальный класс (вернее, перечисляемый тип) TColor.
Хорошее правило ООП - делать переменные внутри класса скрытыми, чтобы другие программисты имели к ним доступ только через интерфейс класса - это гарантия, что данные не будут испорчены.
Поэтому все наши переменные будут в секции private. Наш класс будет выглядеть примерно так (пишем colour, как это принято в Великобритании и Канаде):
private:
bool FOnOff;
TColor FOnColour;
TColor FOffColour;
Префикс F в именах переменных - стандартное соглашение именования членов компонент
(позволяет использовать то же имя, только без F, для соотв. свойства (published property)).
Теперь, раз у нас есть переменные, нам нужны аксессоры (accessors) - функции, осуществляющие доступ, по-английски "access", к данным класса извне,
и мутаторы (mutators) - функции, меняющие значения данных класса, по английски - "mutate",
(здесь еще добавлены ключевые слова __published и __property, но об этом позже).
Довольно странным может показаться, что эти функции помещены в ту же секцию, что и данные, но это также будет объяснено позже:
private:
bool FOnOff;
TColor FOnColour;
TColor FOffColour;
void __fastcall SetOnOff(const bool Value);
void __fastcall SetOnColour(const TColor OnColour);
void __fastcall SetOffColour(const TColor OffColour);
Также существует стандартное соглашение о том, что имена аксессоров начинаются с "Get" , а имена мутаторов - с "Set". Хотя это может показаться так же неудобным, как начинать имена переменных с F, на самом деле это облегчит жизнь в дальнейшем.
Если вы еще не использовали модификатор __fastcall для ваших функций, объясним, зачем он нужен.
Это означает, что при наследовании от классов VCL все функции должны быть __fastcall.
|
|