Объектно-ориентированная программа для работы с графическими объектами. Среда разработки – система программирования Borland C++ Builder

Страницы работы

Фрагмент текста работы

Если не использовать виртуальный метод, то потомки при вызове методов Show() и Hide() будут вызывать родительский метод Draw(), а не свой. Для отрисовки данных в задании графических объектов создали три объекта TGraphObj1, TGraphObj2, TGraphObj3. Все они наследованы от базового объекта TGraphObj и отличаются друг от друга только реализацией метода Draw().

Во время создания главной формы, мы создаем экземпляр объекта TGraphObj, инициализируем его и отображаем на экране. Для управления движением нашего графического объекта посредством манипулятора “мышь”, обрабатываем событие главной формы OnMouseMove, вызываем  GraphObj->Move(X, Y). Для выбора нужного графического объекта мы используем компонент TRadioButton, обрабатываем событие OnClick, в нем сперва прячем старый графический объект, затем удаляем из памяти сам объект, создаем новый экземпляр, инициализируем его и отображаем на форме. Для объединения наших всех RadioButton используем компонент TRadioGroup. Чтобы наш графический объект не затирался при перемещении главной формы за границы экрана, обрабатываем событие OnPaint главной формы, перерисовываем наш объект, если он виден в данный момент.

В процессе разработки объектно-ориентированной программы мы получили следующие файлы: Project1.bpr – файл настроек проекта, Project1.cpp – исходный код проекта, Project1.exe – исполняемый файл программы, Project1.res – файл ресурсов проекта, Unit1.cpp – исходный текст главной формы, Unit1.dfm – файл описания свойств главной формы, Unit1.h – заголовочный файл главной формы.


Результат работы программы


Листинг программы

Project1.cpp

//--------------------------------------------------------------------------#include <vcl.h>

#pragma hdrstop

USERES("Project1.res");

USEFORM("Unit1.cpp", Form1);

//--------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

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

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

TRadioGroup *RadioGroup;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

void __fastcall FormCreate(TObject *Sender);

void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,

int X, int Y);

void __fastcall FormPaint(TObject *Sender);

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

private:    // User declarations

public:           // User declarations

__fastcall TForm1(TComponent* Owner);

};

class TGraphObj // базовый объект

{

public:

int X,Y;

bool Visible;

void Show();

void Hide();

virtual void Draw() = 0;  // пустая виртуальная функция

void Move(int NewX, int NewY);

void Init(int x, int y);

};

class TGraphObj1 : public TGraphObj // наследован от базового

{

void Draw();

};

class TGraphObj2 : public TGraphObj // наследован от базового

{

void Draw();

};

class TGraphObj3 : public TGraphObj // наследован от базового

{

void Draw();

};

//---------------------------------------------------------------------------;

extern PACKAGE TForm1 *Form1;

//--------------------------------------------------------------------------#endif

Unit1.cpp

//--------------------------------------------------------------------------#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//--------------------------------------------------------------------------#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

TGraphObj *GraphObj;  

//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------------------void TGraphObj::Init(int x, int y)

{

X = x;

Y = y;

}

void TGraphObj::Show()

{

Form1->Canvas->Pen->Color = clBlack;

Form1->Canvas->Brush->Color = Form1->Color;

Draw();

Visible = TRUE;

}

void TGraphObj::Hide()

{

Form1->Canvas->Pen->Color = Form1->Color;

Form1->Canvas->Brush->Color = Form1->Color;

Draw();

Visible = FALSE;

}

void TGraphObj::Move(int NewX, int NewY)

{

Hide();

X = NewX;

Y = NewY;

Show();

}

void TGraphObj1::Draw()

{

Windows::TPoint points[4];

points[0] = Point(X-29,Y-10); points[1] = Point(X+29,Y-10);

points[2] = Point(X+7,Y+12);  points[3] = Point(X-7,Y+12);

Form1->Canvas->Polygon(points, 3);

Form1->Canvas->Ellipse(X-7, Y-7, X+7, Y+7);

Form1->Canvas->MoveTo(X, Y+12); Form1->Canvas->LineTo(X, Y+35);

Form1->Canvas->MoveTo(X-15, Y+35); Form1->Canvas->LineTo(X+15, Y+35);

}

void TGraphObj2::Draw()

{

Form1->Canvas->MoveTo(X-20, Y); Form1->Canvas->LineTo(X+20, Y);

Form1->Canvas->Ellipse(X-24, Y-4, X-16, Y+4);

Form1->Canvas->Ellipse(X+20, Y-4, X+28, Y+4);

Form1->Canvas->MoveTo(X-10, Y); Form1->Canvas->LineTo(X-10, Y+30);

Form1->Canvas->MoveTo(X+10, Y); Form1->Canvas->LineTo(X+10, Y+30);

Form1->Canvas->MoveTo(X-10, Y+30); Form1->Canvas->LineTo(X-17, Y+30);

Form1->Canvas->MoveTo(X+10, Y+30); Form1->Canvas->LineTo(X+17, Y+30);

Form1->Canvas->MoveTo(X, Y); Form1->Canvas->LineTo(X, Y-30);

Form1->Canvas->MoveTo(X-10, Y-15); Form1->Canvas->LineTo(X+10, Y-15);

Form1->Canvas->Ellipse(X-4, Y-28, X+4, Y-36);

}

void TGraphObj3::Draw()

{

Form1->Canvas->MoveTo(X-25, Y); Form1->Canvas->LineTo(X+25, Y);

Form1->Canvas->MoveTo(X, Y-25); Form1->Canvas->LineTo(X, Y+25);

Form1->Canvas->Ellipse(X-33, Y-4, X-25, Y+4);

Form1->Canvas->Ellipse(X+33, Y-4, X+25, Y+4);

Form1->Canvas->Ellipse(X-4, Y-25, X+4, Y-33);

Form1->Canvas->Ellipse(X-4, Y+25, X+4, Y+33);

Form1->Canvas->Ellipse(X-12, Y-12, X-18, Y-18);

Form1->Canvas->Ellipse(X+12, Y+12, X+18, Y+18);

Form1->Canvas->Ellipse(X-12, Y+12, X-18, Y+18);

Form1->Canvas->Ellipse(X+12, Y-12, X+18, Y-18);

}

void __fastcall TForm1::FormCreate(TObject *Sender)

{

GraphObj = new TGraphObj1;

GraphObj->Init(320, 100);

GraphObj->Show();

}

//--------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,

int X, int Y) // обрабатываем перемещение мыши

{

GraphObj->Move(X, Y);

}

//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormPaint(TObject *Sender)

// Перерисовываем наш графический объект, если форму перемещали за границу экрана

{

if (GraphObj->Visible) GraphObj->Show();

}

//--------------------------------------------------------------------------void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

if (GraphObj->Visible) GraphObj->Hide(); // прячем старую фигуру, если она видна

delete GraphObj;                       // удаляем старый экземпляр объекта

GraphObj = new TGraphObj1;               // создаем новый экземпляр объекта

GraphObj->Init(320, 100);              // инициализируем новый экземпляр объекта с координатами (320,100)

GraphObj->Show();                      // отображаем графический объект

}

//--------------------------------------------------------------------------void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

if (GraphObj->Visible) GraphObj->Hide();

delete GraphObj;

GraphObj = new TGraphObj2;

GraphObj->Init(320, 100);

GraphObj->Show();

}

//--------------------------------------------------------------------------void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

if (GraphObj->Visible) GraphObj->Hide();

delete GraphObj;

GraphObj = new TGraphObj3;

GraphObj->Init(320, 100);

GraphObj->Show();

}

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

Unit1.dfm

object Form1: TForm1

Left = 307

Top = 151

Width = 640

Height = 480

Caption = 'Разработка ООП обеспечения для работы с графическими объектами'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

Position = poDesktopCenter

OnCreate = FormCreate

OnMouseMove = FormMouseMove

OnPaint = FormPaint

PixelsPerInch = 96

TextHeight = 13

object RadioGroup: TRadioGroup

Left = 0

Top = 0

Width = 632

Height = 39

Align = alTop

Caption = ' Выбирите графический объект '

TabOrder = 0

end

object RadioButton1: TRadioButton

Left = 14

Top = 15

Width = 227

Height = 17

Caption = '1)'

Checked = True

TabOrder = 1

TabStop = True

OnClick = RadioButton1Click

end

object RadioButton2: TRadioButton

Left = 259

Top = 15

Width = 230

Height = 17

Caption = '2)'

TabOrder = 2

OnClick = RadioButton2Click

end

object RadioButton3: TRadioButton

Left = 510

Top = 15

Width = 113

Height = 17

Caption = '3)'

TabOrder = 3

OnClick = RadioButton3Click

end

end


Заключение

В ходе выполненной работы мы узнали что такое объектно-ориентированное программирование и научились применять его на практике. Так же познакомились со средой программирования Borland C++ Builder. Научились использовать графические функции, а также пользоваться

Похожие материалы

Информация о работе

Тип:
Контрольные работы
Размер файла:
124 Kb
Скачали:
0