unit HDPanel;interfaceuses
SysUtils, Classes, Controls, ExtCtrls, ComCtrls;type
THDPanel = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [THDPanel]);
end;{ THDPanel }constructor THDPanel.Create(AOwner: TComponent);
var
pctPageControl: TPageControl;
tbsTabSheet: TTabSheet;
TempStr: TComponentName;
TempStr2: TComponentName;
begin
inherited;
TempStr := 'PageControl1';
TempStr2 := 'TabSheet1';
with Self do
begin
Height := 225;
Width := 345;
Top := 40;
Left := 104;
end;
pctPageControl := TPageControl.Create(AOwner);
pctPageControl.Name := TempStr;
pctPageControl.Parent := Self; tbsTabSheet := TTabSheet.Create(AOwner);
tbsTabSheet.Name := TempStr2;
tbsTabSheet.PageControl := pctPageControl;
tbsTabSheet.Caption := 'why';
end;我的本意是建立一个panel,里面有一个PageControl,PageControl包含一个Tabsheet,但怎么试也不行,请大家帮忙看看
end.
SysUtils, Classes, Controls, ExtCtrls, ComCtrls;type
THDPanel = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [THDPanel]);
end;{ THDPanel }constructor THDPanel.Create(AOwner: TComponent);
var
pctPageControl: TPageControl;
tbsTabSheet: TTabSheet;
TempStr: TComponentName;
TempStr2: TComponentName;
begin
inherited;
TempStr := 'PageControl1';
TempStr2 := 'TabSheet1';
with Self do
begin
Height := 225;
Width := 345;
Top := 40;
Left := 104;
end;
pctPageControl := TPageControl.Create(AOwner);
pctPageControl.Name := TempStr;
pctPageControl.Parent := Self; tbsTabSheet := TTabSheet.Create(AOwner);
tbsTabSheet.Name := TempStr2;
tbsTabSheet.PageControl := pctPageControl;
tbsTabSheet.Caption := 'why';
end;我的本意是建立一个panel,里面有一个PageControl,PageControl包含一个Tabsheet,但怎么试也不行,请大家帮忙看看
end.
请把代码试试就知道了,
unit HDPanel;interfaceuses
SysUtils, Classes, Controls, ExtCtrls, ComCtrls;type
THDPanel = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [THDPanel]);
end;{ THDPanel }constructor THDPanel.Create(AOwner: TComponent);
var
pctPageControl: TPageControl;
tbsTabSheet: TTabSheet;
TempStr: TComponentName;
TempStr2: TComponentName;
begin
inherited;
TempStr := 'PageControl1';
TempStr2 := 'TabSheet1';
with Self do
begin
Height := 225;
Width := 345;
Top := 40;
Left := 104;
end;
pctPageControl := TPageControl.Create(AOwner);
pctPageControl.Name := TempStr;
pctPageControl.Parent := Self; tbsTabSheet := TTabSheet.Create(AOwner);
tbsTabSheet.Name := TempStr2;
tbsTabSheet.PageControl := TPageControl(FindComponent(TempStr));
TTabSheet(FindComponent(TempStr2)).Caption := '终于好了^_^';
end;end.虽然不会出错,但Tabsheet却不是显示在pagecontrol上,请大家帮忙看看
procedure CreateWnd; override;
begin
inherited;
.....
end;
SysUtils, Messages, Classes, Controls, ExtCtrls, ComCtrls;type
THDPanel = class(TPanel)
private
{ Private declarations }
pctPageControl: TPageControl;
tbsTabSheet: TTabSheet;
protected
{ Protected declarations }
procedure CreateWnd; override;
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [THDPanel]);
end;{ THDPanel }constructor THDPanel.Create(AOwner: TComponent);
var
TempStr: TComponentName;
TempStr2: TComponentName;
begin
inherited;
TempStr := 'PageControl1';
TempStr2 := 'TabSheet1';
with Self do
begin
Height := 225;
Width := 345;
Top := 40;
Left := 104;
end;
pctPageControl := TPageControl.Create(AOwner);
pctPageControl.Name := TempStr;
pctPageControl.Parent := Self; tbsTabSheet := TTabSheet.Create(AOwner);
tbsTabSheet.Name := TempStr2;
// tbsTabSheet.PageControl := pctPageControl;
tbsTabSheet.Caption := 'why';
end;procedure THDPanel.CreateWnd;
begin
inherited; if Visible then
tbsTabSheet.PageControl := pctPageControl;
end;end.
我的代码全部都在inherited下啊to JoyYuan97
我试过了,加不加都一样^_^
请问procedure CreateWnd; override;这个过程有什么作用?
Create的时候,由于Panel没有Handle,所以PageControl还没有显示。这时:
tbsTabSheet.PageControl := pctPageControl;
将产生例外。
而CreateWnd;函数执行后,Panel已经有了Handel,也就是PageControl可以显示了,所以可以用这个语句。