- •Введение
- •Лабopaторная работа № 1 Построение графиков функций и диаграмм
- •Лабopaторная работа № 2 Графика в Delphi, Окно выбора шрифта.
- •Лабopaторная работа № 3 Графика в Delphi, классы tFont (шрифт), tPen (перо), tBrush (кисть)
- •Лабopaторная работа № 4 Просмотр изображений с помощью компонентов
- •Лабopaторная работа № 5 Просмотр изображений с помощью компонента tDrawgrid
- •Лабopaторная работа № 6 Просмотр демонстрационной базы данных
- •Лабораторная работа №7 Разработка информационно-поисковой системы
- •Лабораторная работа №8 Разработка классов в Delphi
- •Лабораторная работа №9 Наследование классов в Delphi
- •Список контрольных вопросов
- •Cписок литературы
Лабораторная работа №9 Наследование классов в Delphi
Цель работы: Изменить программу, разработанную в лабораторной работе №8 таким образом, чтобы в графическом редакторе можно было рисовать не только окружности, но и квадраты. Для этого необходимо разработать абстрактный класс, инкапсулирующий требуемый тип поведения фигур. От данного класса будут наследоваться классы, предназначенные для рисования окружностей и квадратов.
Последовательность выполнения работы:
1. Добавьте к проекту модуль, предназначенный для рисования окружностей и квадратов. Он содержит абстрактный класс TFigure, инкапсулирующий требуемый тип поведения фигур. От данного класса наследуются классы, предназначенные для рисования окружностей и квадратов.
unit Figure;
interface
Uses extctrls, Graphics;
Type TMyFigure=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; virtual; abstract; {абстрактная процедура}
Procedure ReSize(ar:Word);
Procedure ReColor(acolor:TColor);
end;
TMyCircle=class(TMyFigure) {класс Окружность}
public Procedure Draw; override; {рисование окружности}
end;
TMySquare=class(TMyFigure) {класс Квадрат}
public Procedure Draw; override; {рисование квадрата}
end;
implementation
Constructor TMyFigure.Create;
Begin
inherited Create;
Image:=aImage; x:=ax; y:=ay; r:=ar; Color:=aColor;
End;
Procedure TMyFigure.Clear;
Var TempColor:TColor;
Begin
TempColor:=Color;
Color:=Image.Canvas.Brush.Color;
Draw;
Color:=TempColor;
End;
Procedure TMyFigure.Resize;
Begin Clear; r:=ar; Draw; End;
Procedure TMyFigure.Recolor;
Begin Clear; Color:=aColor; Draw; End;
Procedure TMyCircle.Draw;
begin Image.Canvas.Pen.Color:=Color;
Image.Canvas.Ellipse(x-r,y-r,x+r,y+r);
End;
Procedure TMySquare.Draw;
begin Image.Canvas.Pen.Color:=Color;
Image.Canvas.Rectangle(x-r,y-r,x+r,y+r);
end;
end.
2. Для того, чтобы в графическом редакторе была реализована возможность рисования не только кругов, но и квадратов, программу следует доработать. Предлагаю это сделать студентам самостоятельно.
Краткие указания к работе
1. Для выбора фигуры (круг или квадрат) используйте компонент TRadioGroup на странице Standard. Данный компонент установите на форму.
2. Установите связь главного модуля unit Main с модулем Figure.
3. В главном модуле в блоке Var кроме класса, предназначенного для рисования окружностей необходимо объявить класс, предназначенный для рисования квадратов.
4. В главном модуле после оператора if Button = mbLeft ( если нажата левая кнопка мыши) необходимо дописать фрагмент программы, реализующий выбор фигуры (квадрата или круга) в зависимости от положения переключателя TRadioGroup. Операторы, реализующие рисование круга, уже имеются в тексте программы, но необходимо дописать операторы, реализующие рисование квадрата и организовать выбор между фигурами. Здесь можно рекомендовать студентам изучить пример использования компонента TRadioGroup, монография [2 ], стр. 313.
