有没有加ToolBar.Parent := Self;?这一句。
另外可以给Toolbar.name和toolbutton.name赋值,这样出现例外也好找错。
给分请点管理。

解决方案 »

  1.   

    TStandardPanel:=inherited Create(AOwner);
    TStandardPanel.Parent := AOwner;
      

  2.   

    给windindance(风舞轻扬) ,chechy(我爱洁洁) :
      Thx!我知道问题出在ToolButton.Parent:=ToolBar一句,ToolButton一般必须有parent Window,而控件一般没有parent Window,所以我不知道如何处理,
    大概要用MAPI吧。
      有没有人知道详细情况的,答出者一定给分!
      

  3.   

    TStandardPanel = class(TPanel)
        
      constructor TStandardToolBar.Create(AOwner: TComponent);
    begin
      TStandardPanel:=inherited Create(AOwner);
      TStandardToolBar和TStandPanel那个是你要作的控件?
    如果都是,请务必如下:
    constructor TStandardPanel.create(AOwner: TComponent)
    begin
    inherited Create(AOwner);
    Parent := AOwner;
    end;constructor TStandardToolBar.create(AOwner: TComponent)
    begin
     inherited Create(AOwner);
     Parent := AOwner;
    end;
      

  4.   

    如果是因为TToolButton,由于TToolButton继承自TControl无Parent属性,应该
    使用TToolButton.SetToolBar(YourToolBar)。
      

  5.   

    TPanel本身就是容器,当然可以做父窗体了,创建时应该
    TStandardPanel:=inherited Create(self);你试试
      

  6.   

    如果是因为TToolBar:constructor TStandardPanel.create(AOwner: TComponent)
    begin
    inherited Create(AOwner);
    Parent := AOwner;FToolbar := TToolBar.Create(Self);
    FToolbar.Parent := Self;
    end;
      

  7.   

    To borlandor(大民) :
      Thx!Panel上放SpeedButton就没有问题,因为ToolButton无输入焦点,
    而SpeedButton有,我认为这是区别,大概要处理W Message,不知如何处理。
      

  8.   

    对了,你要重载如下方法,该方法为你的控件申请了一个Windows句柄。
    也许你的初始化代码(有关Window handle的)放在此处。
    procedure CreateParams(var Params: TCreateParams); override;
    begin
      inherited CreateParams(Params);
      inherited Create(AOwner);
      
      FToolbar := TToolBar.Create(Self);
      FToolbar.Parent := Self;end;
      

  9.   

    To borlandor(大民): 
      procedure CreateParams(var Params: TCreateParams); override;
    begin
      inherited CreateParams(Params);
      inherited Create(AOwner);
      
      FToolbar := TToolBar.Create(Self);
      FToolbar.Parent := Self;end;
      Thx,能不能写详细点?inherited Create(AOwner);一句是不是在 constructor Create(AOwner: TComponent); override;中调用?
    CreateParams(var Params: TCreateParams); override;中没有AOwner啊!还有FToolbar := TToolBar.Create(Self);
      FToolbar.Parent := Self;
    我全都放在Create(AOwner: TComponent); 中了,还是出现
    Control '' has no parent window
      错误。
      

  10.   

    完整的例子:unit StandardPanel;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, ComCtrls;type
      TStandardPanel = class(TPanel)
      private
        { Private declarations }
        FToolBar: TToolBar;
        FToolButton: TToolButton;
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [TStandardPanel]);
    end;constructor TStandardPanel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Self.Width := 200;
      Self.Height := 100;
      //这句是必须的
      Parent := TWincontrol(AOwner);  FToolBar := TToolBar.Create(AOwner);
      FToolbar.Parent := Self;
      FToolButton := TToolButton.Create(AOwner);
      FToolButton.Parent := FToolbar;
    end;destructor TStandardPanel.Destroy;
    begin
      FToolButton.Free;
      FToolBar.Free;
    end;end.
      

  11.   

    To Borlandor(大民) :
      Thanks very much?
      
      点管理中的给分就可以将100分全给你吗?
      请多关照!