gpt4 book ai didi

delphi - 如何在 Create 中设置 TCustomControl 的父级

转载 作者:行者123 更新时间:2023-12-03 15:43:53 25 4
gpt4 key购买 nike

当我们创建一个组件作为自定义控件并将该控件放在面板上时,该控件始终显示在表单上而不是包含的控件上。如何在创建中设置自定义控件的父级,以便当按钮放在面板上时,按钮的父级就是面板?

TGlassButton = class(TCustomControl)
...
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
...

constructor TGlassButton.Create(AOwner: TComponent);
begin
inherited; ???????????
inherited Create(AOwner); ????????????
Parent := TWinControl( AComponent ); ??????????????
...
end;

问题是设计时创建而不是运行时。这非常有效:

procedure TForm10.FormCreate(Sender: TObject);
begin
GlassButton0 := TGlassButton.Create( Panel1 );
GlassButton0.Parent := Panel1;
GlassButton0.Left := 20;
GlassButton0.Top := 6;
GlassButton0.Width := 150;
GlassButton0.Height := 25;
GlassButton0.Caption := 'Created At RunTime';
end;

最佳答案

不要在构造函数中设置 Parent 属性!正如其他人所说,IDE 和 DFM 流系统将在构造函数退出后自动分配 Parent。如果您需要在构造函数中执行依赖于所分配的 Parent 的操作,那么您需要重新设计组件。重写虚拟 SetParent() 和/或 Loaded() 方法并从那里执行操作。并利用 if (ComponentState 中的 csDesigning) then ... 检查可以避免设计时实际不需要的操作的地方。

关于delphi - 如何在 Create 中设置 TCustomControl 的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com