Вот краткое описание задания:
Массив точек должен быть задан как поле класса фигуры в защищенной секции и инициализироваться в конструкторе класса фигуры.
добавить вторую фигуру. Для нее изменения положения и масштаба теми же элемен-тами управления, что и для первой фигуры (для этого необходимо реализовать возмож-ность переключения режима управления 1-й фигурой или 2-й фигурой).
Обе фигуры должны наследоваться от одного базового класса, в котором описаны методы рисования, смещения и масштабирования фигуры.
В программе должно быть объявлено не менее трех классов: форма приложения, фигура 1, фигура 2.
А вот мой (сокращенный) код:
Код:
const m=10;// шаг перемещения
type
TForm1 = class(TForm)
end;
type TFigure = class
private
function control(x_,y_,r_:integer):boolean;
function krest2(x,y:integer):boolean;
procedure Move(x_,y_:integer);
end;
var
Form1: TForm1;
Figure1: TFigure;
x,y,r:integer;
cf,ct:TColor;
a:string;
p: array[1..13] of TPoint;
implementation
function TFigure.control(x_,y_,r_:integer):boolean;//контроль границ
begin
result:=false;
if ((x-(2*(r+r_)+m+x_) < Form1.PaintBox1.left)and (x_ < 0))or((x+(2*(r+r_)+m+x_) > Form1.PaintBox1.Width+Form1.PaintBox1.left)and (x_ > 0))or
((y-(2*(r+r_)+m+y_) < Form1.PaintBox1.Top)and (y_ < 0))or((y+(2*(r+r_)+m+y_) > Form1.PaintBox1.Height+Form1.PaintBox1.Top)and (y_ > 0))then
result:=true;
end;
procedure TFigure.move(x_,y_:integer);
begin
if figure1.control(x_,y_,0) = false then
begin
with form1 do
begin
paintbox1.canvas.pen.color:=cf;
paintbox1.canvas.brush.color:=cf;
krest2(x,y);
paintbox1.canvas.pen.color:=clBlack;
paintbox1.canvas.brush.color:=ct;
end;
x:=x+x_; y:=y+y_;
Figure1.krest2(x,y);
end;
end;
procedure TForm1.krest(x,y:integer);
begin
with form1.paintbox1.canvas do
begin
p[1].X:=x+r; p[1].Y:=y-r;
p[2].X:=x+r; p[2].Y:=y-(6*r);
p[3].X:=x-r; p[3].Y:=y-(6*r);
p[4].X:=x-r; p[4].Y:=y-r;
p[5].x:=x-(6*r); p[5].y:=y-r;
p[6].X:=x-(6*r); p[6].y:=y+r;
p[7].X:=x-r; p[7].Y:=y+r;
p[8].x:=x-r; p[8].y:=y+(6*r);
p[9].X:=x+r; p[9].Y:=y+(6*r);
p[10].x:=x+r; p[10].y:=y+r;
p[11].x:=x+(6*r); p[11].Y:=y+r;
p[12].X:=x+(6*r); p[12].Y:=y-r;
p[13].X:=x+r; p[13].y:=y-r;
polygon(p);
end;
end;
function TFigure.krest2(x,y:integer):boolean;
begin
result:=false;
with form1.paintbox1.canvas do
begin
p[1].X:=x-(2*r); p[1].Y:=y-(2*r);
p[2].X:=x-(3*r); p[2].Y:=y-(3*r);
p[3].X:=x-(4*r); p[3].Y:=y-(2*r);
p[4].X:=x-(4*r); p[4].Y:=y+(2*r);
p[5].x:=x-(3*r); p[5].y:=y+(3*r);
p[6].X:=x-(2*r); p[6].y:=y+(2*r);
p[7].X:=x+(2*r); p[7].Y:=y+(2*r);
p[8].x:=x+(3*r); p[8].y:=y+(3*r);
p[9].X:=x+(4*r); p[9].Y:=y+(2*r);
p[10].x:=x+(4*r); p[10].y:=y-(2*r);
p[11].x:=x+(3*r); p[11].Y:=y-(3*r);
p[12].X:=x+(2*r); p[12].Y:=y-(2*r);
p[13].X:=x-(2*r); p[13].y:=y-(2*r);
polygon(p);
result:=true;
end;
end;
procedure TForm1.pravoClick(Sender: TObject);
begin
figure1.move(+m,0);
end;
procedure TForm1.LevoClick(Sender: TObject);
begin
figure1.move(-m,0);
end;
procedure TForm1.NizClick(Sender: TObject);
begin
figure1.move(0,+m);
end;
procedure TForm1.VerxClick(Sender: TObject);
begin
figure1.move(0,-m);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Lines.Clear;
ct:=clgreen;
cf:=clblue;
x:=200;
y:=200;
r:=10;
TrackBar1.Position:=r;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.pen.color:=cf;
Form1.Canvas.Brush.Color:=cf;
form1.Canvas.Rectangle(Form1.PaintBox1.Left,Form1.PaintBox1.Top,Form1.PaintBox1.Width,Form1.PaintBox1.Height);
paintbox1.canvas.pen.color:=clBlack;
paintbox1.canvas.brush.color:=ct;
figure1.krest2(x,y);
radiobutton1.Checked:=true;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);//изменение масштаба
begin
if (r > TrackBar1.Position)or((figure1.control(1,0,1) = false)and(figure1.control(0,1,1) = false)and(figure1.control(0,-1,1) = false)and(figure1.control(-1,0,1) = false)) then
begin
s_r.Caption:=inttostr(TrackBar1.Position);
dt:=now;
if trackbar1.position <> 10 then
paintbox1.canvas.pen.color:=cf;
paintbox1.canvas.brush.color:=cf;
figure1.krest2(x,y);
r:=TrackBar1.Position;
figure1.move(0,0);
end else TrackBar1.Position:=r;
end;
end;
end.
Кто что посоветует, как довести прогу до ума?
При установке Линукс не пострадало ни одного пингвина... Зато пострадало много дятлов..