此代码改为:
unit panel1;interfaceuses
  Windows, Messages, SysUtils, Classes,Variants, Forms, Controls,
  Graphics, Dialogs, ExtCtrls, StdCtrls;type
  TpanelAAA = class(Tpanel)
  private
    Procedure ClickButton(sender : TObject);
    { Private declarations }
  protected
    { Protected declarations }
  public
    a : integer;
    Button : TButton;
    constructor Create(AOwner : TComponent);override;
    destructor Destroy; override;
    { Public declarations }
  published
    { Published declarations }
  end;procedure Register;implementationprocedure Register;
begin
  RegisterComponents('MyConponent', [TpanelAAA]);
end;Procedure TpanelAAA.ClickButton(sender : TObject);
var
  i: integer;
begin
  if (a mod 2) = 0 then
  begin
  for i:= 10 to 100 do
    begin
    Height := i* 2;
    Refresh;
    end;
  end else
  begin
  for i := 100 downto 10 do
  begin
    Height := i* 2;
    Refresh;
  end;
  end;
  a:= a+1;
end;
constructor TpanelAAA.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  Button := TButton.Create(aowner);//»òButton:=TButton.Create(TPanel(Self));
  Button.Parent:=tPanel(self);
  Button.Top := Top;
  Button.Left := Left;
  Button.Show;
  Button.OnClick := ClickButton;end;destructor TpanelAAA.Destroy;
begin
  Button.Free;
end;end.以上代码在编辑其它程序,使用此组件时,运行会有错误,提示"TButton 没有找到."。如果在程序窗体上加一个Button就可以运行但这时实际在自定义的组件中有2个button。这是为什么。

解决方案 »

  1.   

    Button.Show->InsertControl(Button);
      

  2.   

    修改:constructor TpanelAAA.Create(AOwner : TComponent);
    begin
      inherited Create(AOwner);
      Button := TButton.Create(aowner);//»òButton:=TButton.Create(AOwner);
    //  Button.Parent:=tPanel(self);
      Button.Top := Top;
      Button.Left := Left;
    //  Button.Show;
      Button.OnClick := ClickButton;
      InsertControl(Button);
    end;destructor TpanelAAA.Destroy;
    begin
    //  Button.Free;
      inherited;
    end;