我想做一个类似ToolBar的控件,我继承的父类是和ToolBar一样的,我想在我的控件里面任意增加 TToolButton,源码如下:
unit gtab;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs,StdCtrls,
Buttons, ComCtrls,ExtCtrls, ToolWin, CommCtrl;type
tgtab = class(TToolWindow)
private
{ Private declarations }
FBtnWidth:Integer;
FBtnHeight:Integer;
FButtons:TList;
procedure SetWidth(const Value:Integer);
procedure SetHeight(const Value:Integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
procedure CreateTabPage;
published
{ Published declarations }
property BtnWidth:Integer Read FBtnWidth Write SetWidth default 20;
property BtnHeight:Integer Read FBtnHeight Write SetHeight default 20;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [tgtab]);end;{ tgtab }constructor tgtab.Create(AOwner: TComponent);
begin
inherited Create(AOwner); Height:=150;
Width:=30;
FBtnWidth:=20;
FBtnHeight:=20;
FButtons := TList.Create;
end;procedure tgtab.CreateTabPage;
Var Button: TToolButton;
aItem:Integer;
begin
Button := TToolButton.Create(Owner);
Button.Style:= tbsSeparator;
if FButtons.Count>0 then
aItem:=FButtons.Count-1
else
aItem:=0;
FButtons.Insert(aItem,Button);
button.SetBounds(5,aItem*5+5,20,20);
button.Parent:=Self;
button.Perform(TB_ADDBUTTONSA,aItem,0);
end;destructor tgtab.Destroy;
var
I: Integer;
begin
for I := 0 to FButtons.Count - 1 do
if TControl(FButtons[I]) is TToolButton then
TToolButton(FButtons[I]).Destroy;
FButtons.Free;
inherited Destroy;
end;procedure tgtab.SetHeight(const Value:Integer);
begin
if Value<> FBtnHeight then
FBtnHeight:=Value;
end;procedure tgtab.SetWidth(const Value:Integer);
begin
if Value<>FBtnWidth then
FBtnWidth:=Value;
end;end.问:我注册控件后为什么调用CreateTabPage方法,BUTTON显示不出来?因为BUTTON的确是创建了的。
unit gtab;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs,StdCtrls,
Buttons, ComCtrls,ExtCtrls, ToolWin, CommCtrl;type
tgtab = class(TToolWindow)
private
{ Private declarations }
FBtnWidth:Integer;
FBtnHeight:Integer;
FButtons:TList;
procedure SetWidth(const Value:Integer);
procedure SetHeight(const Value:Integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
procedure CreateTabPage;
published
{ Published declarations }
property BtnWidth:Integer Read FBtnWidth Write SetWidth default 20;
property BtnHeight:Integer Read FBtnHeight Write SetHeight default 20;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [tgtab]);end;{ tgtab }constructor tgtab.Create(AOwner: TComponent);
begin
inherited Create(AOwner); Height:=150;
Width:=30;
FBtnWidth:=20;
FBtnHeight:=20;
FButtons := TList.Create;
end;procedure tgtab.CreateTabPage;
Var Button: TToolButton;
aItem:Integer;
begin
Button := TToolButton.Create(Owner);
Button.Style:= tbsSeparator;
if FButtons.Count>0 then
aItem:=FButtons.Count-1
else
aItem:=0;
FButtons.Insert(aItem,Button);
button.SetBounds(5,aItem*5+5,20,20);
button.Parent:=Self;
button.Perform(TB_ADDBUTTONSA,aItem,0);
end;destructor tgtab.Destroy;
var
I: Integer;
begin
for I := 0 to FButtons.Count - 1 do
if TControl(FButtons[I]) is TToolButton then
TToolButton(FButtons[I]).Destroy;
FButtons.Free;
inherited Destroy;
end;procedure tgtab.SetHeight(const Value:Integer);
begin
if Value<> FBtnHeight then
FBtnHeight:=Value;
end;procedure tgtab.SetWidth(const Value:Integer);
begin
if Value<>FBtnWidth then
FBtnWidth:=Value;
end;end.问:我注册控件后为什么调用CreateTabPage方法,BUTTON显示不出来?因为BUTTON的确是创建了的。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货