写了一个类:  TAssMarking = class(TGraphicControl)
  protected
    procedure Paint;  override;
  end;  procedure TAssMarking.Paint;
  begin
    inherited;
    with Canvas do
    begin
      Brush.Color := clRed;
      FillRect(ClientRect);
      TextOut(20,20,'abcdefg');
    end;
  end;没有注册成控件,而是运行时直接动态创建调用。
  AssMarking := TAssMarking.Create(Self);
  AssMarking.Parent := Form1;
  AssMarking.Show;为什么在窗体上显示不出来呢?跟踪发现Paint根本没有被调用。我查资料,不是说TGraphicControl会自动响应消息调用Paint吗?我看了TLabel的代码,也没有什么特别的地方啊。为什么我的就不行呢?
请大虾们解答一下,谢谢!

解决方案 »

  1.   

    Form1什么都没有,就是一个空窗体。
      

  2.   

     AssMarking := TAssMarking.Create(Self);
      AssMarking.Parent := Form1;
      AssMarking.Left := 50;
      AssMarking.Top := 50;
      AssMarking.Width := 200;
      AssMarking.Height := 200;
      AssMarking.Show;建议写在重载类的create,将高、宽等设置放入其中
      

  3.   

    狂吐血中!!!
    AssMarking.Width := 200; 
    AssMarking.Height := 200;
    就是缺了这两句,所以默认宽和高是0,当然显示不出来了!!!
    郁闷啊!!!人老了,啥都想不动了~~~~谢谢大家,结贴,散分!