Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
13
Добавлен:
20.12.2018
Размер:
252.42 Кб
Скачать

Лабораторная работа № 2

Задание: создание собственного класса на базе TObject. Создать новый класс TAngle, наследник класса TObject. Класс TAngle предназначен для визуального задания пользователем плоских углов в градусах.

Реализовать класс TAngle и программу, реализующую этот класс.

Создать новый метод для изменения значений xpos ypos и соответствующие элементы управления, позволяющие управлять местоположением области рисования

Обеспечить одновременную работу с 2 экземплярами класса.

Ввести в класс новое свойство, определяющее цвет закрашенной области.

Код программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type

TMyForm = class(TForm)

ColorDialog1: TColorDialog;

Edit1: TEdit;

Button_1: TButton;

Edit2: TEdit;

Button_2: TButton;

Button_3: TButton;

Button_5: TButton;

Label1: TLabel;

Label2: TLabel;

Image1: TImage;

Button1: TButton;

UpDown1: TUpDown;

RadioGroup1: TRadioGroup;

procedure FormCreate(Sender: TObject);

procedure Button_1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button_5Click(Sender: TObject);

procedure UpDown1ChangingEx(Sender: TObject; var AllowChange: Boolean;

NewValue: Smallint; Direction: TUpDownDirection);

procedure Button_2Click(Sender: TObject);

procedure Button_3Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

end;

Type TAngle=class

private

ColorDialog1: TColorDialog;

Value:integer;

XPos,YPos:integer;

Can:TCanvas;

Image1:TImage;

{ Private declarations }

public

constructor Create(X,Y:integer; NewCanvas:TCanvas);

procedure SetValue(NewValue:integer);

function Plus (Increment:integer):integer;

function Minus(Decrement:integer):integer;

procedure Draw;

destructor Destroy; override;

end;

{ Public declarations }

var

MyForm: TMyForm;

Angle:TAngle;

Angle2:TAngle;

c,c2:Tcolor;

nazh, nazh2:boolean;

colorCheck:boolean;

implementation

{$R *.dfm}

constructor TAngle.Create(X,Y:integer; NewCanvas:TCanvas);

begin

inherited Create;

XPos:=X;

YPos:=Y;

Value:=45;

Can:=NewCanvas;

end;

function TAngle.Plus (Increment:integer):integer;

begin

Value:= (Value + Increment) mod 360;

result:=Value;

end;

function TAngle.Minus (Decrement:integer):integer;

begin

Value:= (Value - Decrement) mod 360;

result:=Value;

end;

procedure TAngle.SetValue(NewValue:integer);

begin

Value:=NewValue;

Value:=NewValue mod 360;

End;

destructor TAngle.Destroy;

begin

inherited Destroy;

end;

procedure TAngle.Draw;

begin

Can.pie(XPos, YPos, XPos+100, YPos+100, XPos+50+round(50*cos(Value*pi/180)),YPos+50+round(50*sin(Value*pi/180)),XPos+100, YPos+51);

end;

procedure TMyForm.FormCreate(Sender: TObject);

begin

c:=clWhite;

nazh:=false;

nazh2:=False;

Image1.Canvas.MoveTo(0, 65);

Image1.Canvas.LineTo(130, 65);

Image1.Canvas.MoveTo(65, 0);

Image1.Canvas.LineTo(65, 130);

Image1.Canvas.MoveTo(120,62);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(120, 68);

Image1.Canvas.LineTo(127, 65);

end;

procedure TMyForm.Button_1Click(Sender: TObject);

begin

try

Button_5Click(Sender);

if RadioGroup1.ItemIndex = 0 then

begin

Image1.Canvas.Brush.Color:=c;

Angle:=TAngle.Create(15,15,Image1.Canvas);

Angle.SetValue(Strtoint(Edit1.text));

Angle.Draw;

nazh := true;

end

else

begin

Image1.Canvas.Brush.Color:=c2;

Angle2:=TAngle.Create(15,15,Image1.Canvas);

Angle2.SetValue(Strtoint(Edit1.text));

Angle2.Draw;

nazh2:=true;

end;

Image1.Canvas.MoveTo(120,62);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(120, 68);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(0, 65);

Image1.Canvas.LineTo(130, 65);

Image1.Canvas.MoveTo(65, 0);

Image1.Canvas.LineTo(65, 130);

except

on EconvertError do showmessage ('Error!!!');

end;

end;

procedure TMyForm.Button1Click(Sender: TObject);

begin

if (ColorDialog1.Execute=true) then

if (RadioGroup1.ItemIndex = 0) then

c:=ColorDialog1.Color

else

c2:=ColorDialog1.Color;

end;

procedure TMyForm.Button_5Click(Sender: TObject);

begin

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.Rectangle(0,0,130,130);

Image1.Canvas.MoveTo(120,62);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(120, 68);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(0, 65);

Image1.Canvas.LineTo(130, 65);

Image1.Canvas.MoveTo(65, 0);

Image1.Canvas.LineTo(65, 130);

end;

procedure TMyForm.UpDown1ChangingEx(Sender: TObject;

var AllowChange: Boolean; NewValue: Smallint;

Direction: TUpDownDirection);

begin

if (Direction = updUP) and (strtoint(Edit2.Text) >= 0) then

Edit2.Text:=inttostr(strtoint(Edit2.Text)+1);

if (Direction = updDown) and (strtoint(Edit2.Text) > 0) then

Edit2.Text:=inttostr(strtoint(Edit2.Text)-1);

end;

procedure TMyForm.Button_2Click(Sender: TObject);

begin

Edit1.Text:=inttostr(strtoint(Edit2.Text)+strtoint(Edit1.Text));

Button_1Click(Sender);

end;

procedure TMyForm.Button_3Click(Sender: TObject);

begin

Edit1.Text:=inttostr(strtoint(Edit1.Text)-strtoint(Edit2.Text));

Button_1Click(Sender);

end;

procedure TMyForm.RadioGroup1Click(Sender: TObject);

begin

if (RadioGroup1.ItemIndex = 0) and (nazh = true) then

begin

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.Rectangle(0,0,130,130);

Image1.Canvas.Brush.Color:=c;

Angle.Draw;

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.MoveTo(120,62);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(120, 68);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(0, 65);

Image1.Canvas.LineTo(130, 65);

Image1.Canvas.MoveTo(65, 0);

Image1.Canvas.LineTo(65, 130);

end;

if (RadioGroup1.ItemIndex = 1) and (nazh2 = true) then

begin

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.Rectangle(0,0,130,130);

Image1.Canvas.Brush.Color:=c2;

Angle2.Draw;

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.MoveTo(120,62);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(120, 68);

Image1.Canvas.LineTo(127, 65);

Image1.Canvas.MoveTo(0, 65);

Image1.Canvas.LineTo(130, 65);

Image1.Canvas.MoveTo(65, 0);

Image1.Canvas.LineTo(65, 130);

end;

end;

end.

Скриншот незапущенной программы:

Скриншот запущенной программы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]