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

Лабораторная работа №8 Разработка классов в Delphi

Цель работы: Разработать программу, реализующую графический редактор, который рисует окружности по нажатию левой кнопки мыши. Центр окружности совпадает с местоположением курсора. Радиус круга и цвет окружности должны настраиваться. Модуль, предназначенный для рисования окружностей, необходимо разработать в виде класса.

Последовательность выполнения работы:

1. Установите на форме компоненты в соответствии с рис. 7.

2. Компоненты, настраиваем с помощью Инспектора Объектов следующим образом:

Form1: Edit1:

Name:=MainForm; Name:=rEdit;

Caption:=’Графический редактор Окружности’; Text:=’’;

Image1: UpDown1:

Name:=Image; Name:=UpDown;

Label1: Associate:=rEdit;

Name:=rLabel; Button1:

Caption:=’Радиус круга’; Name:=ColorButton;

ColorDialog1 Button2:

Name:=ColorDialog Name:=ExitButton;

Здесь компонент UpDown – счетчик, предназначенный для изменения значения в строке ввода, находится на странице Win 32.

Рис 7. Форма к лабораторной работе №8

2. Наберите главный модуль программы

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type

TMainForm = class(TForm)

Image: TImage;

rLabel: TLabel;

rEdit: TEdit;

ColorButton: TButton;

ExitButton: TButton;

UpDown: TUpDown;

ColorDialog: TColorDialog;

procedure FormActivate(Sender: TObject);

procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure UpDownClick(Sender: TObject; Button: TUDBtnType);

procedure ColorButtonClick(Sender: TObject);

procedure ExitButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.dfm}

Uses circle;

Var C:TMyCircle;

procedure TMainForm.FormActivate(Sender: TObject);

begin

Image.Canvas.Brush.Color:=clWhite;

Image.Canvas.Pen.Color:=clBlack;

end;

procedure TMainForm.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

// Если нажата левая кнопка мыши

if Button=mbLeft then

begin

// Если объект создан, то уничтожить его

C.Free;

// Конструировать

C:=TMyCircle.Create(Image,X,Y,strtoint(rEdit.Text),Image.Canvas.Pen.Color);

// Изобразить объект с заданными параметрами

C.Draw;

end;

end;

procedure TMainForm.UpDownClick(Sender: TObject; Button: TUDBtnType);

begin

// Если объект создан, то перерисовать с другим радиусом;

if C<>nil then

C.ReSize(strtoint(rEdit.Text));

end;

procedure TMainForm.ColorButtonClick(Sender: TObject);

begin

if ColorDialog.Execute then

Image.Canvas.Pen.Color:=ColorDialog.Color;

// Если объект создан, то перерисовать с другим цветом

if C<>nil then

C.ReColor(Image.Canvas.Pen.Color);

end;

procedure TMainForm.ExitButtonClick(Sender: TObject);

Begin Close; End;

Initialization

// Если объект создан, то уничтожить его

Finalization C.Free;

end.

3. Наберите модуль, предназначенный для рисования окружностей. Для того, чтобы добавить в состав проекта новый модуль используйте команду File \ New \ Unit

unit Circle;

interface

Uses extctrls,Graphics;

Type TMyCircle=class

private

x,y,r:Word; {координаты центра и радиус окружности}

Color:TColor; {цвет}

Image:TImage; {поле для рисования}

Procedure Clear; {стирание окружности}

Public

{конструктор}

Constructor Create(aImage:TImage;ax,ay,ar:Word;aColor:TColor);

Procedure Draw; {рисование}

Procedure ReSize(ar:Word); {изменение размеров}

Procedure Recolor(acolor:TColor); {изменение цвета}

end;

Implementation

Constructor TMyCircle.Create;

Begin inherited Create; {вызвать наследуемый конструктор}

Image:=aImage;

x:=ax; y:=ay; r:=ar; Color:=aColor;

End;

Procedure TMyCircle.Draw;

Begin

Image.Canvas.Pen.Color:=Color;

Image.Canvas.Ellipse(x-r,y-r,x+r,y+r); {нарисовать окружность}

end;

Procedure TMyCircle.Clear;

Var TempColor:TColor;

begin

Color:=Image.Canvas.Brush.Color;

Draw;

Color:=TempColor;

End;

Procedure TMyCircle.ReSize;

Begin Clear; r:=ar; Draw; End;

Procedure TMyCircle.ReColor(aColor:TColor);

Begin Clear; Color:=aColor; Draw; End;

End.

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