Delphi холст фигуры
Я получил домашнее задание по Dephi (никогда не использовал его раньше, только C++/java, но в моем университете у нас есть предмет на языке Delphi). Ну, мне нужно сделать форму с движущимися фигурами, показать, как они сталкиваются и тому подобное. Я начал делать уинт, как какой-то класс abstarct
unit MyFigure;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls;
type
tPoint = record
x,y: Double;
end;
oFigure = class
c: TCanvas;
pos: tPoint;
vel: tPoint;
r: Double;
constructor create(coord, vect: tPoint; radius: Double);
protected
procedure move();
procedure draw(); virtual;
public
function isIntersected(x:oFigure):boolean;
end;
implementation
constructor oFigure.create(coord, vect: tPoint; radius: Double);
begin
pos.x:= coord.x;
pos.y:= coord.y;
vel.x:= vect.x;
vel.y:= vect.y;
r:=radius;
end;
procedure oShape.draw(); virtual;
begin
end;
procedure oShape.move();
begin
pos.x:= pos.x + vel.x;
pos.y:= pos.y + vel.y;
oShape.draw();
end;
function isIntersected(o:oFigure):boolean;
begin
if ((oShape.pos.x - o.pos.x)*(oShape.pos.x - o.pos.x) + (oShape.pos.y - o.pos.y)*(oShape.pos.y - o.pos.y)
< (oShape.r + o.r)*(oShape.r + o.r)) then Result:=True;
end;
end.
Тогда я создал это ребенок. Ну, здесь мне нужно вызвать метод дуги с холста, чтобы нарисовать мяч, но он этого не видит, и Ева говорит unable to invoke code completion
, В чем дело?
unit Ball;
interface
uses
MyFigure;
type
oBall = class(oFigure);
c: TCanvas;
procedure draw(); override;
end;
implementation
procedure oBall.draw();
begin
c.Arc()//PROBLEM!
end;
end.
1 ответ
Завершение кода не вызывается, потому что в блоке использования не указана графика объекта: Попробуйте с
unit Ball;
interface
uses
Graphics, MyFigure;
Между прочим, вы, кажется, не воплощаете в жизнь c. Для этого вам понадобится конструктор и деструктор. Обычный способ - передать экземпляр TCanvas в качестве параметра в процедуру draw(). В модуле oFigure Вы определяете TPoint, но TPoint является собственным типом RTL/VCL. Вам не нужно определять это. В oFigure вы также устанавливаете некоторые методы как защищенные, но парадоксально предыдущие переменные являются открытыми.