//Unit DrawRec
unit DrawRec;interfaceuses
  Windows, Messages, Controls, Graphics, SysUtils;type
  TShape = class
  private
    F_Canvas: TCanvas;
    //F_Rect: TRect;
  protected
  procedure DrawRectangle(TempRect: TRect); virtual; abstract;
  public
  constructor Create;
  destructor Destroy; override;
  end;
  TRectangle = class(TShape)
  private
  protected
  procedure DrawRectangle(TempRect: TRect); override;
  public
  procedure DoDrawRectangle(Temp_Rect: TRect);
  end;
implementationconstructor TShape.Create;
begin
  F_Canvas := TCanvas.Create;
end;destructor TShape.Destroy;
begin
  inherited;
  F_Canvas.Free;
end;procedure TRectangle.DoDrawRectangle(Temp_Rect: TRect);
begin
  DrawRectangle(Temp_Rect);
end;procedure TRectangle.DrawRectangle(TempRect: TRect);
begin
  F_Canvas.Rectangle(TempRect);
end;end.
________________________________
//Unit1procedure TForm1.Button1Click(Sender: TObject);
var
  Draw: TRectangle;
  R_Rect: TRect;
begin
  with R_Rect do
  begin
    left := Form1.Left;
    top := Form1.Top;
    right := Form1.Width;
    Bottom := Form1.Height;
  end;
  try
  Draw := TRectangle.Create;
  Draw.DoDrawRectangle(R_Rect);
  finally?
  Draw.Free;
  end;
end;
为什么一点button的时候就会出现错误>?? 到底问题出在哪里/? 谢谢!

解决方案 »

  1.   

    R_Rect没创建就调用,是这个原因吗?
      

  2.   

    应该不是吧,, Rect不用创建吧
      

  3.   

    with R_Rect do
      begin
        left := Form1.Left;
        top := Form1.Top;
        right := Form1.Width;
        Bottom := Form1.Height;
      end;
    这个地方有错误
    left 和top是正确的
    right:=form1.left+form1.width;
    bottom:=form1.top+form1.height
    呵呵~~~:)
      

  4.   

    不是了,, 出的是Debugger Exception Notification 这个对话框,  TRectangle是我自定义的一个类,,在DrawRec单元里定义的.
      

  5.   

    恩,照ghostmirror(mirror)的试试,那样才是对的
      

  6.   

    否则可能是Form1.Left<Form1.Width,这样不就出错了,还有把你自己定义的那个类的DoDrawRectangle方法的代码贴出来,看看