Проект 2

 

Створіть на диску Е: у своєму каталозі новий проект та збережіть його: модулю Unit1.cpp надайте ім’я Timer.cpp, а файлу проекту Project1.bpr – ім’я Colori. bpr.

Помістіть на форму компонент Button (укладка Standard), компонент CheckBox (укладка Standard), компонент ColorDialog (укладка Dialogs), компонент Timer (укладка System) та компонент SpinEdit (укладка Samples).

Розташування компонентів показано на рис. 1:

Рис. 1.

 

Встановіть властивості компонентів згідно таблиці:

 

Компонент Name Властивість Значення
Form1 FormMain Caption Canvas
    Color clBlack
    Height
    Width
Button1 Button1 Caption Select Color
    Anchors ->akTop true
    Anchors ->akRight true
CheckBox1 CheckBox1 Caption Revers
    Font->Color clWhite
    Color clBlack
    Anchors ->akTop true
    Anchors ->akRight true
Timer1 Timer1 Interval
SpinEdit1 СSpinEdit1 Increment
    MaxValue
    MinValue
    Value
    Anchors ->akTop true
    Anchors ->akRight true
ColorDialog1 ColorDialog1    

 

Форма буде матиме вигляд як на рис. 2:

Рис. 2.

 

Збережіть проект.

У заголовному файлі Timer.h пропишіть константи, змінні та функції, які будуть використані у вашій програмі: //--------------------------------------------------

 

const int MaxPoints = 15;

struct TRPoint { float X, Y; };

class TFormMain : public TForm {

__published: // IDE-managed Components

private: // User declarations

TRPoint Points[MaxPoints];

float Rotation; // у радіанах

int PointCount;

void __fastcall RotatePoints();

public: // User declarations

__fastcall TFormMain (TComponent* Owner);

};

//------------------------------------------------

У файл Timer.cpp додайте директиву #include <math.h> та опис оголошеної функції: //-------------------------------------------------------

void __fastcall TFormMain::RotatePoints()

{

int RN=8; // all figures are in radians

const float M_2PI = 2 * M_PI;

float StepAngle = M_2PI / PointCount;

if (!CheckBox1->Checked) Rotation += M_PI / RN;

if (CheckBox1->Checked) Rotation -= M_PI / RN;

if (Rotation > StepAngle) Rotation -= StepAngle;

int i;

float j;

for (i = 0, j = Rotation; i < PointCount; i++, j += StepAngle)

{

Points[i].X = cos(j);

Points[i].Y = sin(j);

}

}

//------------------------------------------------------

Активуйте форму FormMain та створіть для неї оброблювач події OnCreate: //-------------------------------------------------------

void __fastcall TFormMain::FormCreate(TObject *Sender)

{

Canvas->Pen->Color = clTeal;

Rotation = 0;

PointCount = MaxPoints;

RotatePoints();

}

//-------------------------------------------------------

Активуйте форму FormMain та створіть для неї оброблювач події OnPaint: //------------------------------------------------------

void __fastcall TFormMain::FormPaint(TObject *Sender)

{

int radius;

int centerX = ClientWidth / 2;

int centerY = ClientHeight / 2;

if (centerX < centerY)

radius = centerX;

else radius = centerY;

Canvas->Ellipse(0, 0, radius*2, radius*2);

int i, j;

for (i = 0; i < PointCount; i++)

{

for (j = i + 1; j < PointCount; j++)

{

Canvas->MoveTo(radius + float(Points[i].X * radius), radius + float(Points[i].Y * radius));

Canvas->LineTo(radius + float(Points[j].X * radius), radius + float(Points[j].Y * radius));

}

}

}

//------------------------------------------------------

Активуйте форму FormMain та створіть для неї оброблювач події OnResize: //--------------------------------------------------------

void __fastcall TFormMain::FormResize(TObject *Sender)

{

Invalidate();

}

//--------------------------------------------------------

Активуйте компонент Timer1 та створіть для нього оброблювач події OnTimer: //-------------------------------------------------------

void __fastcall TFormMain::Timer1Timer(TObject *Sender)

{

RotatePoints();

Invalidate();

}

//-------------------------------------------------------

Активуйте компонент CSpinEdit1 та створіть для нього оброблювач події OnChange: //------------------------------------------------------------

void __fastcall TFormMain::CSpinEdit1Change(TObject *Sender)

{

Timer1->Interval=CSpinEdit1->Value;

}

//-------------------------------------------------------------

Активуйте кнопку Button1 та створіть для неї оброблювач події OnClick: //--------------------------------------------------------

void __fastcall TFormMain::Button1Click(TObject *Sender)

{

if (ColorDialog1->Execute())

Canvas->Pen->Color = ColorDialog1->Color;

}

//--------------------------------------------------------

Збережіть проект.

Запустіть програму на виконання. Вікно Вашого проекту матиме вигляд як на рис. 3:

 

Рис. 3.

Контрольні питання

1. Назвіть основні властивості класу ТCanvas.

2. Назвіть основні методи класу ТCanvas.

3. Коли виникає подія OnResize форми?

4. Яка подія забезпечує виведення графіки на поверхню форми?

5. Яке призначення методу Invalidate()?