Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 15:52   #1
Krechet
Пользователь
 
Аватар для Krechet
 
Регистрация: 03.12.2008
Сообщений: 76
По умолчанию Delphi. Создание нового класса, его "предков".

Вот краткое описание задания:
Массив точек должен быть задан как поле класса фигуры в защищенной секции и инициализироваться в конструкторе класса фигуры.
добавить вторую фигуру. Для нее изменения положения и масштаба теми же элемен-тами управления, что и для первой фигуры (для этого необходимо реализовать возмож-ность переключения режима управления 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.
Кто что посоветует, как довести прогу до ума?
При установке Линукс не пострадало ни одного пингвина... Зато пострадало много дятлов..
Krechet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]: Создание нового класса с наследованием Kolhan Помощь студентам 6 17.04.2009 00:03
Что такое "дескриптор" и с чем его едят? Snake_ua Win Api 3 30.10.2007 11:17
Создание нового класса на базе существующего SpiritSm Общие вопросы Delphi 1 19.07.2007 10:11
Создание нового класса на базе существующего SpiritSm Помощь студентам 1 19.07.2007 01:05