Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
16.04.2013
Размер:
5.58 Кб
Скачать
unit OOP1;


interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;


type
TForm1 = class(TForm)
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;




type
TPoints=Class
X,Y:Integer;
Visible:Boolean;
Constructor Init(A,B:Integer);
Function GetX:Integer;
Function GetY:Integer;
Procedure Show;Virtual;
Procedure Hide;Virtual;
Procedure Move(DX,DY:Integer);
end;


type
TCircle=Class(TPoints)
Radius:Word;
Constructor Init(A,B:Integer;R:Word);
Function GetR:Word;
Procedure Show;Override;
Procedure Hide;Override;
end;



type
CirFill = Class(TCircle)
Color:TColor;
Constructor Init(A,B:Integer;R:Word;C:TColor);
Function GetC:TColor;
Procedure Show;Override;
Procedure Hide;Override;
end;

var
Form1: TForm1;


implementation
{$R *.dfm}
constructor TPoints.Init(A,B:Integer);
begin
X:=A;
Y:=B;
Visible:=False
end;

function TPoints.GetX:Integer;
begin
GetX:=X;
end;


function TPoints.GetY:Integer;
begin
GetY:=Y;
end;

procedure TPoints.Show;
begin
Form1.Canvas.Pixels[X,Y]:=Form1.Canvas.Pen.Color;
Visible:=True
end;


procedure TPoints.Hide;
begin
Form1.Canvas.Pixels[X,Y]:= Form1.Color;
Visible:=False
end;



procedure TPoints.Move(DX,DY:Integer);
var
B:Boolean;
begin
B:=Visible;
if B then
Hide;
X:=X+DX;
Y:=Y+DY;
if B then
Show
end;

constructor TCircle.Init(A,B:Integer;R:Word);
begin
inherited Init(A,B);
Radius:=R
end;


function TCircle.GetR:Word;
begin
GetR:=Radius;
end;



procedure TCircle.Show;
begin
Form1.Canvas.Arc(X-Radius,Y-Radius,X+Radius,Y+Radius,X,0,X,0);
Visible:=True;
end;



procedure TCircle.Hide;
var
Color:TColor;
begin
Color:= Form1.Canvas.Pen.Color;
Form1.Canvas.Pen.Color := Form1.Color;
Show;
Visible:=False;
Form1.Canvas.Pen.Color:=Color;
end;

constructor CirFill.Init(A,B:Integer;R:Word;C: TColor);
begin
inherited Init(A,B,R); { Задать центр и радиус }
Color:=C { Задать цвет круга }
end;



function CirFill.GetC:TColor;{ Вернуть цвет круга }
begin
GetC:=Color
end;




procedure CirFill.Show; {Нарисовать закрашенный круг }
// var
//C:TColor;
begin
inherited Show; { Нарисовать окружность }
Form1.Canvas.Brush.Color:= Color;{Установить цвет кисти}
Form1.Canvas.Ellipse(X-Radius,Y-Radius, X+Radius,Y+Radius);
Visible:=True; { Установить признак светимости}
end;




procedure CirFill.Hide; { Стереть круг }
var
C:TColor;
begin
C:=Color; { Запомнить цвет круга }
Color:=Form1.Color; { Установить цвет круга равным текущему цвету фона }
Show; { Закрасить круг цветом фона, }
inherited Hide; { стереть окружность - в результате круг становится невидимым}
Visible:=False; { Сбросить признак светимости }
Color:=C { Установить прежний цвет круга}
end;



procedure AnyHlop(Any:TCircle);
var
R:Word;
begin
with Any do
begin
R:=Radius; { Запомнить радиус окружности }
while Radius>0 do{ "Стянуть" окружность в точку, }
begin { постепенно уменьшая её радиус }
Show;
sleep(1);///////////////////////////////////////-------------------
Hide;
dec(Radius);
end;
Visible:=False; { Сбросить признак светимости }
Radius:=R; { Восстановить исходный радиус }
end;
end;




procedure AnyPolh(Any:TCircle);
var
R:Word;
begin
with Any do
begin
R:=Radius; { Запомнить радиус окружности }
Radius:=0;
while Radius<R do{"Восстановить" окружность из точки}
begin { постепенно увеличивая её радиус }
sleep(1); //////////////////////////////////////////////////////---------
Hide;
inc(Radius);
Show;
end;
Visible:=True; { Установить признак светимости }
Radius:=R; { Восстановить исходный радиус }
end;
end;





procedure TForm1.Button2Click(Sender: TObject);
var
C:TCircle; { Объект - окружность }
CF:CirFill; { Объект - закрашенный круг }
A,B:Integer; { Координаты центра круга }
R:Word; { Радиус круга }
Col:TColor; { Цвет круга }
Bool:Boolean;
i:Word;
begin
Form1.Color:= clbtnface; {Установить текущие цвета}
Form1.Canvas.Pen.Color:= clBlack;{фона и линий }
Randomize;
Bool:=True;
C:=TCircle.Create;
CF:=CirFill.Create;
for i:=1 to 10 do
begin
R:=Random(100)+50; { Выбрать радиус 50<=R<150 }
A:=Random(Form1.ClientWidth-2*R)+R;{ Выбрать центр круга }
B:=Random(Form1.ClientHeight-2*R)+R;
Col:=Random(65535); { Выбрать цвет круга }
if Bool then
begin
C.Init(A,B,R); { Задать окружность }
AnyHlop(C); { "Стянуть" её в точку }
AnyPolh(C); { "Восстановить её из точки}
end
else
begin
CF.Init(A,B,R,Col) ;{ Задать круг }
CF.Show; { Нарисовать круг }
AnyHlop(CF); { "Стянуть" круг в точку }
AnyPolh(CF); { "Восстановить" круг }
end;
Bool:=not Bool; { Сменить признак выбора типа объекта }
end;
C.Destroy;
CF.Destroy;
end;

end.

Соседние файлы в папке laba5(Classes)
  • #
    16.04.20138.44 Кб26OOP1.dcu
  • #
    16.04.201351 б26OOP1.ddp
  • #
    16.04.2013497 б26OOP1.dfm
  • #
    16.04.20135.58 Кб28OOP1.pas
  • #
    16.04.201351 б26OOP1.~ddp
  • #
    16.04.2013497 б26OOP1.~dfm
  • #
    16.04.20136.81 Кб26OOP1.~pas
  • #
    16.04.2013416 б27_OOP.cfg
  • #
    16.04.20132.02 Кб26_OOP.dof