Лабораторная работа № 4
Задание: Реализация простейших механизмов полиморфизма.
Создание 4 классов (одного предка и трех его потомков), позволяющих рисовать на экране раскрашенные геометрические фигуры, используя принцип полиморфизма.
Использование в качестве кнопок BitBtn
Вывод вместо квадрата прямоугольника с соотношением высота/ширина 2.
Код программы:
Unit1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2, StdCtrls, ExtCtrls, Buttons;
type
TFormDraw = class(TForm)
Panel1: TPanel;
BitBlueRou: TBitBtn;
BitBlSq: TBitBtn;
BitWhSq: TBitBtn;
BitRedCir: TBitBtn;
BitWhCir: TBitBtn;
BitRedRou: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitRedRouClick(Sender: TObject);
procedure BitBlueRouClick(Sender: TObject);
procedure BitBlSqClick(Sender: TObject);
procedure BitWhSqClick(Sender: TObject);
procedure BitRedCirClick(Sender: TObject);
procedure BitWhCirClick(Sender: TObject);
procedure Cleanarea;
procedure CheckCenterClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDraw: TFormDraw;
RouRe: TRoundRect;
Ci: TCircle;
Sq: TSquare;
implementation
{$R *.dfm}
procedure TFormDraw.Cleanarea;
begin
Application.MainForm.Canvas.Pen.color:=clbtnface;
Application.MainForm.Canvas.Brush.color:=clbtnface;
Application.MainForm.Canvas.Rectangle(0,0,500,500);
end;
procedure TFormDraw.FormCreate(Sender: TObject);
begin
FormDraw.Canvas.Pen.Width:=1;
BitRedRou.Glyph.Canvas.Pen.Color:=clblue;
BitRedRou.Glyph.Canvas.Brush.Color:=clred;
BitRedRou.Glyph.Canvas.RoundRect(1,1,17,17,2,2);
BitBlueRou.Glyph.Canvas.Pen.Color:=clred;
BitBlueRou.Glyph.Canvas.Brush.Color:=clblue;
BitBlueRou.Glyph.Canvas.RoundRect(1,1,17,17,2,2);
BitBlSq.Glyph.Canvas.Pen.Color:=clwhite;
BitBlSq.Glyph.Canvas.Brush.Color:=clblack;
BitBlSq.Glyph.Canvas.Rectangle(1,1,17,17);
BitWhSq.Glyph.Canvas.Pen.Color:=clblack;
BitWhSq.Glyph.Canvas.Brush.Color:=clwhite;
BitWhSq.Glyph.Canvas.Rectangle(1,1,17,17);
BitRedCir.Glyph.Canvas.Pen.Color:=clblue;
BitRedCir.Glyph.Canvas.Brush.Color:=clred;
BitRedCir.Glyph.Canvas.Ellipse(1,1,17,17);
BitWhCir.Glyph.Canvas.Pen.Color:=clblack;
BitWhCir.Glyph.Canvas.Brush.Color:=clwhite;
BitWhCir.Glyph.Canvas.Ellipse(1,1,17,17);
end;
procedure TFormDraw.BitRedRouClick(Sender: TObject);
begin
RouRe.Free;
RouRe:=TRoundRect.Create;
RouRe.RedBrush;
RouRe.DrawIT(10,10,140,110);
end;
procedure TFormDraw.BitBlueRouClick(Sender: TObject);
begin
RouRe.Free;
RouRe:=TRoundRect.Create;
RouRe.BlueBrush;
RouRe.DrawIT(10,190,140,290);
end;
procedure TFormDraw.BitBlSqClick(Sender: TObject);
begin
Sq.Free;
Sq:=TSquare.Create;
Sq.BlackBrush;
Sq.DrawIT(170,10,270,150);
end;
procedure TFormDraw.BitWhSqClick(Sender: TObject);
begin
Sq.Free;
Sq:=TSquare.Create;
Sq.WhiteBrush;
Sq.DrawIT(170,190,270,330);
end;
procedure TFormDraw.BitRedCirClick(Sender: TObject);
begin
Ci.Free;
Ci:=TCircle.Create;
Ci.RedBrush;
Ci.DrawIT(330,10,430,110);
end;
procedure TFormDraw.BitWhCirClick(Sender: TObject);
begin
Ci.Free;
Ci:=TCircle.Create;
Ci.WhiteBrush;
Ci.DrawIT(330,190,430,290);
end;
procedure TFormDraw.CheckCenterClick(Sender: TObject);
begin
Cleanarea;
end;
end.
Unit2:
unit Unit2;
interface
uses Forms, graphics;
type TDrawArea=class(TObject)
procedure WhiteBrush;
procedure BlueBrush;
procedure BlackBrush;
procedure RedBrush;
end;
type TSquare=class(TDrawArea)
procedure DrawIT(x1,y1,x2,y2:integer);
end;
type TCircle=class(TDrawArea)
procedure DrawIT(x1,y1,x2,y2:integer);
end;
type TRoundRect=class(TDrawArea)
procedure DrawIT(x1,y1,x2,y2:integer);
end;
implementation
procedure TDrawArea.WhiteBrush;
begin
Application.MainForm.Canvas.Pen.Color:=clblack;
Application.MainForm.Canvas.Brush.Color:=clwhite;
end;
procedure TDrawArea.BlackBrush;
begin
Application.MainForm.Canvas.Pen.Color:=clwhite;
Application.MainForm.Canvas.Brush.Color:=clblack;
end;
procedure TDrawArea.BlueBrush;
begin
Application.MainForm.Canvas.Pen.Color:=clred;
Application.MainForm.Canvas.Brush.Color:=clblue;
end;
procedure TDrawArea.RedBrush;
begin
Application.MainForm.Canvas.Pen.Color:=clblue;
Application.MainForm.Canvas.Brush.Color:=clred;
end;
procedure TSquare.DrawIT(x1,y1,x2,y2:integer);
begin
Application.MainForm.Canvas.Rectangle(x1,y1,x2,y2);
end;
procedure TCircle.DrawIT(x1,y1,x2,y2:integer);
begin
Application.MainForm.Canvas.Ellipse(x1,y1,x2,y2);
end;
procedure TRoundRect.DrawIT(x1,y1,x2,y2:integer);
begin
Application.MainForm.Canvas.RoundRect(x1,y1,x2,y2,10,10);
end;
end.
Скриншот незапущенной программы:
Скриншот запущенной программы: