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

Лабораторная работа № 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.

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

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

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