- •Введение
- •Лабopaторная работа № 1 Построение графиков функций и диаграмм
- •Лабopaторная работа № 2 Графика в Delphi, Окно выбора шрифта.
- •Лабopaторная работа № 3 Графика в Delphi, классы tFont (шрифт), tPen (перо), tBrush (кисть)
- •Лабopaторная работа № 4 Просмотр изображений с помощью компонентов
- •Лабopaторная работа № 5 Просмотр изображений с помощью компонента tDrawgrid
- •Лабopaторная работа № 6 Просмотр демонстрационной базы данных
- •Лабораторная работа №7 Разработка информационно-поисковой системы
- •Лабораторная работа №8 Разработка классов в Delphi
- •Лабораторная работа №9 Наследование классов в Delphi
- •Список контрольных вопросов
- •Cписок литературы
Лабораторная работа №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.
