07.06.2010, 15:27
общий
это ответ
Здравствуйте, Botsman.
Создате простой проект Application
Добавьте на форму
- TPaintBox - необходимо размеры Width и Height сделать одинаковыми
- TLabel
- TButton
В ниже приведенном коде присутствует заголовочный файл и cpp файл.
Добавлена функция on_paint. Остальные функции все созданы в BCB.
Удачи.
Приложение:
=============== UNIT1.H ==========================
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPaintBox *PaintBox1;
TLabel *Label1;
TButton *Button1;
void __fastcall PaintBox1Click(TObject *Sender);
void __fastcall PaintBox1Paint(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
int nodes;
void __fastcall do_paint();
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
=============UNIT1.CPP==========================
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
nodes = 3;
PaintBox1->Canvas->Pen->Color = clBlack;
PaintBox1->Canvas->Brush->Color = clWhite;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Click(TObject *Sender)
{
// количество узлов увеличить
nodes += 1;
if ( nodes > 6 ) nodes = 6;
do_paint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::do_paint()
{
TPoint p[6]; // точки фигуры
int r = (PaintBox1->Width - 1) / 2; // радиус окружности,которая поместится в PaintBox
// рассчитать фигуру, вписанную в круг - так проще и красивее
// ! начало - левый верхний угол.
// ! х - слева на право
// ! y - сверху вниз
{
double ugol = 2*M_PI / nodes; // 2Пи = 360*
for (int i=0; i<nodes; i++) {
p[i].x = r + r * cos(ugol*i);
p[i].y = r - r * sin(ugol*i);
}
}
// очистить поле канву
PaintBox1->Canvas->FillRect(TRect(0, 0, PaintBox1->Width, PaintBox1->Height));
// рисуем контур фигуры, начать с:
PaintBox1->Canvas->MoveTo(p[0].x, p[0].y);
for (int i=1; i<nodes; i++) {
// провести в:
PaintBox1->Canvas->LineTo(p[i].x, p[i].y);
}
// вернуть в начало:
PaintBox1->Canvas->LineTo(p[0].x, p[0].y);
Label1->Caption = "Вершин: " + AnsiString(nodes);
}
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
// перерисовать
do_paint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// сбросить
nodes = 3;
do_paint();
}
//---------------------------------------------------------------------------