Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Колодей В.А..docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
121 Кб
Скачать
☆

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

При запуске программы открывается окно:

Справа видны три кнопки, при нажатии на которые будут отображаться указанные на кнопках рисунки.

Для передвижения рисунка следует щелкнуть левой кнопкой мыши в том месте, где необходимо отобразить рисунок. Рисунок появится в указанном месте и будет следовать за указателем мыши. Для остановки рисунка в нужном месте необходимо ещё раз щёлкнуть левой кнопкой мыши, указывая место остановки.

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

Unit.h

#ifndef Unit1H

#define Unit1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Graphics.hpp>

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

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPanel *Panel1;

TPanel *Panel2;

TImage *Image1;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TImage *Image2;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y);

void __fastcall Image1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

class TRis

{

public:

TRis();

void Clear(TForm1 *form);

virtual void Risuet(TForm1 *form,int x, int y);

};

class TStrela : public TRis

{

public:

__fastcall TStrela();

virtual void Risuet(TForm1 *form,int x, int y);

};

class TLuna : public TRis

{

public:

__fastcall TLuna();

virtual void Risuet(TForm1 *form,int x, int y);

};

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

extern PACKAGE TForm1 *Form1;

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

#endif

Unit.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int i=0;

TRis * ris;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{ //выбрана кнопка Смайл

i=0; //чтоб сначала рисунок не мог двигаться

ris=new TRis();

ris->Risuet(Form1,100,100);

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{ //выбрана кнопка Стрелка

i=0; //чтоб сначала рисунок не мог двигаться

ris=new TStrela();

ris->Risuet(Form1,50,50);

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{ //выбрана кнопка Месяц

i=0; //чтоб сначала рисунок не мог двигаться

ris=new TLuna();

ris->Risuet(Form1,80,50);

}

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

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

TRis::TRis()

{

delete ris; ris=NULL;

}

//**********************************************************

__fastcall TStrela::TStrela() : TRis()

{

}

//**********************************************************

__fastcall TLuna::TLuna() : TRis()

{

}

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

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

void TRis::Clear(TForm1 *form)

{//почистить экран

form->Image2->Visible=false;

form->Image1->Canvas->Pen->Color=clWhite;

form->Image1->Canvas->Brush->Color=clWhite;

form->Image1->Canvas->Rectangle(0,0,form->Image1->Width,form->Image1->Height);

}

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

void TRis::Risuet(TForm1 *form,int x, int y)

{//рисовать Смайл

Clear(form); //чистим экран

//подготовить инструменты для рисования

form->Image1->Canvas->Pen->Color=clBlack; //этим рисуем

form->Image1->Canvas->Pen->Width=10;

form->Image1->Canvas->Brush->Color=clWhite; //этим заливаем

form->Image1->Canvas->Ellipse(x-80,y-40,x,y+40);

form->Image1->Canvas->Ellipse(x-60,y-20,x-50,y-10);

form->Image1->Canvas->Ellipse(x-30,y-20,x-20,y-10);

form->Image1->Canvas->Arc(x-60,y,x-20,y+40,x-20,y+20,x-60,y+20);

}

void TStrela::Risuet(TForm1 *form,int x, int y)

{//рисовать Стрелку

Clear(form); //чистим экран

form->Image2->Left=x-20;

form->Image2->Top=y-20;

form->Image2->Picture->Bitmap->LoadFromFile("strelka.bmp");

form->Image2->Visible=true;

}

void TLuna::Risuet(TForm1 *form,int x, int y)

{//нарисовать Месяц

Clear(form); //чистим экран

form->Image2->Left=x-20;

form->Image2->Top=y-20;

form->Image2->Picture->Bitmap->LoadFromFile("luna.bmp");

form->Image2->Visible=true;

}

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

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

if (i==0) return; //не двигать, выйти

ris->Risuet(Form1,X,Y); //перерисовать рисунок с новыми координатами

}

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

void __fastcall TForm1::Image1Click(TObject *Sender)

{

if (i==1) i=0; //установить флаг "не двигать"

else i=1; //установить флаг " двигать"

}