Курсовая работа: Построение компоненты в Builder C++
Также нам понадобится создать класс TMarshrut для рисования маршрута движения шарика и класс ТShar, рисующий сам шарик. Оба этих класса должны лишь уметь рисовать себя, поэтому в качестве базового класса выбираем TCustomGraphic.
Теперь можно приступать к созданию компоненты. Открываем вкладку Component и выбираем NewComponent. В появившемся окне выбираем базовый класс (Ancestortype) - TCustomControl, вводим имя своего класса (ClassName) -TOsnova, выбираем вкладку палитры компонентов, на которую компонента будет установлена (Palettepage) -Samples, и путь, где будут хранится файлы компоненты. После щелчка на кнопке ОК C++ Builder создаст для нашей компоненты новый модуль и сохранит его в указанном месте.
Аналогичным образом создаём два класса TMarshrut и ТShar. Для совместной работы трёх классов необходимо подключить h-файлы с помощью директивы #include.
Теперь рассмотрим созданные нами классы. TMarshrut и ТShar должны уметь рисовать себя, поэтому в них достаточно переопределить виртуальный метод базового класса Paint():
virtualvoid __fastcallPaint();
Переопределенный метод Paint() этих классов должен включать в себя код их рисования. Ниже показан исходный код метода Paint() класса ТShar:
void __fastcall TShar::Paint()
{
Canvas->Brush->Color=clGreen;
Shar->Width=(D-d)/2;
Shar->Height=(D-d)/2;
Canvas->Ellipse(0,0,Shar->Width,Shar->Height);
}
Исходный код метода Paint() класса TMarshrut
//---------------------------------------------------------------------------
// рисуем две окружности заданного цвета
void __fastcallTMarshrut::Paint()
{
Canvas->Brush->Color=clRed;
Marshrut->Ris_Marshrut(D/2);
Canvas->Brush->Color=clBtnFace;
Marshrut->Ris_Marshrut(d/2);
}
//---------------------------------------------------------------------------
Реализация функции Ris_Marshrut(intR) (прототип находится в секции protected класса ТMarshrut):
//---------------------------------------------------------------------------
//рисуем окружность заданного радиуса
void __fastcall TMarshrut::Ris_Marshrut(int R)
{