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

Лабораторная работа № 5

Задание: позднее связывание.

Модифицировать программу из лабораторной работы № 4 таким образом, чтобы в ней поддерживался механизм позднего связывания. Кроме того, необходимо реализовать автоматическое движение объектов на экране влево/вправо/вверх/вниз.

Задания аналогичны заданиям в работе № 4.

Код программы:

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;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure onClick(Sender: TObject);

procedure Cleanarea;

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FormDraw: TFormDraw;

MyCurrent:TDrawArea;

NOfButton:integer;

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.onClick(Sender: TObject);

begin

MyCurrent.Free;

Cleanarea;

NOfButton:=(Sender as TBitbtn).Tag;

case NOfButton of

1,2: MyCurrent:=TRoundRect.Create;

3,4: MyCurrent:=TSquare.Create;

5,6: MyCurrent:=TCircle.Create;

end;

case NOfButton of

1,5: MyCurrent.RedBrush;

2 : MyCurrent.BlueBrush;

3 : MyCurrent.BlackBrush;

4,6: MyCurrent.WhiteBrush;

end;

MyCurrent.direction:= random(4);

MyCurrent.DrawIT;

Timer1.Enabled:= true;

end;

procedure TFormDraw.Timer1Timer(Sender: TObject);

begin

if MyCurrent.direction = 0 then

begin

MyCurrent.Clean;

MyCurrent.x1:= MyCurrent.x1 + 5;

MyCurrent.x2:= MyCurrent.x2 + 5;

MyCurrent.DrawIT;

end

else if MyCurrent.direction = 1 then

begin

MyCurrent.Clean;

MyCurrent.x1:= MyCurrent.x1 - 5;

MyCurrent.x2:= MyCurrent.x2 - 5;

MyCurrent.DrawIT;

end

else if MyCurrent.direction = 2 then

begin

MyCurrent.Clean;

MyCurrent.y2:= MyCurrent.y2 + 5;

MyCurrent.y1:= MyCurrent.y1 + 5;

MyCurrent.DrawIT;

end

else if MyCurrent.direction = 3 then

begin

MyCurrent.Clean;

MyCurrent.y2:= MyCurrent.y2 - 5;

MyCurrent.y1:= MyCurrent.y1 - 5;

MyCurrent.DrawIT;

end;

end;

end.

Unit2:

unit Unit2;

interface

uses Forms, graphics;

type TDrawArea=class(TObject)

procedure WhiteBrush;

procedure BlueBrush;

procedure BlackBrush;

procedure RedBrush;

procedure DrawIt; virtual; abstract;

procedure Clean;

constructor Create;

public

direction, x1, y1, x2, y2: integer;

penCol, brushCol: TColor;

end;

type TSquare=class(TDrawArea)

procedure DrawIT; override;

end;

type TCircle=class(TDrawArea)

procedure DrawIT; override;

end;

type TRoundRect=class(TDrawArea)

procedure DrawIT; override;

end;

implementation

constructor TDrawArea.Create;

begin

inherited create;

x1:= 250;

x2:= 140;

y1:= 250;

y2:= 110;

end;

procedure TDrawArea.WhiteBrush;

begin

Application.MainForm.Canvas.Pen.Color:=clblack;

Application.MainForm.Canvas.Brush.Color:=clwhite;

penCol:= clblack;

brushCol:= clwhite;

end;

procedure TDrawArea.BlackBrush;

begin

Application.MainForm.Canvas.Pen.Color:=clwhite;

Application.MainForm.Canvas.Brush.Color:=clblack;

penCol:= clwhite;

brushCol:= clblack;

end;

procedure TDrawArea.BlueBrush;

begin

Application.MainForm.Canvas.Pen.Color:=clred;

Application.MainForm.Canvas.Brush.Color:=clblue;

penCol:= clred;

brushCol:= clblue;

end;

procedure TDrawArea.RedBrush;

begin

Application.MainForm.Canvas.Pen.Color:=clblue;

Application.MainForm.Canvas.Brush.Color:=clred;

penCol:= clblue;

brushCol:= clred;

end;

procedure TSquare.DrawIT;

begin

Application.MainForm.Canvas.Rectangle(x1,y1,x2,y2);

end;

procedure TCircle.DrawIT;

begin

Application.MainForm.Canvas.Ellipse(x1,y1,x2,y2);

end;

procedure TRoundRect.DrawIT;

begin

Application.MainForm.Canvas.RoundRect(x1,y1,x2,y2,10,10);

end;

procedure TDrawArea.Clean;

begin

Application.MainForm.Canvas.Brush.Color:= clBtnFace;

Application.MainForm.Canvas.Pen.Color:= clBtnFace;

Application.MainForm.Canvas.Rectangle(x1,y1,x2,y2);

Application.MainForm.Canvas.Brush.Color:= brushCol;

Application.MainForm.Canvas.Pen.Color:= penCol;

end;

end.

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

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

28

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