1.这个原因就是重画的原因,我写了一个从tshape派生的类有一个onpaint事件,再这个事件里可以做你想做的事,祝你好运。
2.这个组件要注册到delphi里。unit Unit2;interfaceuses ExtCtrls,classes,Graphics;type
  TCanvaP=procedure(sender:Tobject;Canvas:TCanvas) of object;type
  TMyShape=class(tshape)
  private
    FOnPaint:TCanvaP;
  protected
    procedure paint;override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property onPaint:TCanvaP read FOnPaint write FOnPaint;
    property Canvas; 
end;procedure Register;implementation{ myshape }procedure Register;
begin
  RegisterComponents('Additional',[TMyShape]);
end;constructor TMyShape.Create(AOwner: TComponent);
begin
  inherited;
end;destructor TMyShape.Destroy;
begin
  inherited;
end;procedure TMyShape.paint;
begin
  inherited;
  if assigned(FonPaint) then FOnPaint(self,canvas);
  //to do your code;  canvas.MoveTo(0,0);           //del;
  canvas.LineTo(100,100);       //del;end;end.