德尔福帆布人物

时间:2012-09-17 20:26:49

标签: delphi delphi-7 delphi-units

我在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.

然后我创造了它的孩子。好吧,在这里我需要从画布调用arc方法来绘制球,但它没有看到它和前夕说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 个答案:

答案 0 :(得分:0)

未调用代码完成,因为在uses子句中未指定单位 graphics :尝试使用

unit Ball;

interface
uses
  Graphics, MyFigure;

顺便说一下,你似乎没有实现 c 。你需要一个构造函数和析构函数。通常的方法是将TCanvas实例作为参数传递给draw()。在 oFigure 单元中,您定义 TPoint ,但TPoint是RTL / VCL的本机类型。您无需定义它。在 oFigure 中,您还将一些方法设置为受保护但是反式地将以前的变量设置为公共。