Консультация № 178971
07.06.2010, 09:43
35.95 руб.
0 1 1
Уважаемые эксперты. Требуется ваша помощь в написании программы на C++. Программа под Windows. Программа в графическом режиме. Среда - любая удобная для вас (хотя если есть возможность использовать Borland CBuilder6, то это просто замечательно)
Задача.
Изначально на paint box-е изображен триугольник. При щелчке по нему он становится четырехугольником => пятиугольником => шестиугольником. Число углов показывается справа от рисунка. (от 3 до 6).
Заранее спасибо.

Обсуждение

Неизвестный
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();
}
//---------------------------------------------------------------------------
5
Спасибо!
Форма ответа