有关Parent
我想作这样一个控件:
在CoolBar上创建一个 ToolBar, 再在Toolbar上创建N个 SpeedButton
代码如下:
TcySpeedButton = Class(TSpeedButton)
Private
Public
Constructor Create(aOwner: TComponent); Override;
Destructor Destroy; Override;
end;
TcyCoolBar = Class(TCoolBar)
Private
ToolBar: TToolBar;
SpeedNew: TcySpeedButton;
SpeedSave: TcySpeedButton;
SpeedDel: TcySpeedButton;
SpeedPrint: TcySpeedButton;
SpeedClose: TcySpeedButton;
protected
public
constructor Create(aOwner: TComponent); Override;
destructor Destroy; override;
published
end;
constructor TcyCoolBar.Create(aOwner: TComponent);
begin
inherited;
Self.Height := 55;
ToolBar := TToolBar.Create(Self);
With ToolBar do
begin
ToolBar.Height := 52;
Parent := Self;
SpeedNew := TcySpeedButton.Create(nil);
With SpeedNew do
begin
Caption := '新增 ';
Glyph.LoadFromFile( 'D:\Work\BMP\5.bmp ');
Parent := ToolBar; //这儿有错!
end;
end;
end;
destructor TcyCoolBar.Destroy;
begin
if assigned(ToolBar) then
FreeAndNil(ToolBar);
inherited;
end;
{ TcySpeedButton }
constructor TcySpeedButton.Create(aOwner: TComponent);
begin
inherited;
Height := 50;
Width := 45;
Layout := blGlyphTop;
end;
destructor TcySpeedButton.Destroy;
begin
inherited;
end;
[解决办法]
parent 写 self 指得是他的父类CoolBar所产生的实例,你在这里写的时候类还没有具体实例化,不存在ToolBar这样的实例名称
[解决办法]
SpeedNew := TcySpeedButton.Create(CoolBar);
create的参数是ower,指的就是panrent。还有,动态创建的speedbutton默认是不可见的,还应该把visible设置成true。