让 IDE 中我控件上的组件成为我控件的子控件
Let components dropped on my control in the IDE become children of my control
我有一个 TWinControl
的后代(实际上现在只是那个),我将它注册为 IDE 中的一个组件:
type
TGroupPanel = class(TWinControl);
但是当我将其他组件放在上面时,它们会附加到表单而不是我的控件。换句话说,我希望我的自定义控件表现得像 TPanel
,以便放在它上面的组件成为它的子组件。
如果我在运行时创建组件并手动将它们分配给我的控件,就像下面的代码一样,那么它就可以工作:
TForm1 = class(TForm)
Group: TGroupPanel;
procedure FormCreate(Sender: TObject);
private
Panel: TPanel;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel := TPanel.Create(Group);
Panel.Parent := Group;
Panel.Align := alClient;
end;
那么,我应该怎么做才能让在设计时放在 TWinControl
上的组件成为该控件的子控件?
(我想做的是做一个特殊的控件来对其他组件进行分组,这样我就可以将它们对齐并定位在一起。当然,我可以用普通面板做到这一点,但我想这样做这是一个不绘制任何东西的轻量级控件,在 TWinControl
中我找到了解决方案。)
为 ControlStyle
设置 csAcceptControls
标志。
constructor TGroupPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csAcceptsControls];
end;
我有一个 TWinControl
的后代(实际上现在只是那个),我将它注册为 IDE 中的一个组件:
type
TGroupPanel = class(TWinControl);
但是当我将其他组件放在上面时,它们会附加到表单而不是我的控件。换句话说,我希望我的自定义控件表现得像 TPanel
,以便放在它上面的组件成为它的子组件。
如果我在运行时创建组件并手动将它们分配给我的控件,就像下面的代码一样,那么它就可以工作:
TForm1 = class(TForm)
Group: TGroupPanel;
procedure FormCreate(Sender: TObject);
private
Panel: TPanel;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel := TPanel.Create(Group);
Panel.Parent := Group;
Panel.Align := alClient;
end;
那么,我应该怎么做才能让在设计时放在 TWinControl
上的组件成为该控件的子控件?
(我想做的是做一个特殊的控件来对其他组件进行分组,这样我就可以将它们对齐并定位在一起。当然,我可以用普通面板做到这一点,但我想这样做这是一个不绘制任何东西的轻量级控件,在 TWinControl
中我找到了解决方案。)
为 ControlStyle
设置 csAcceptControls
标志。
constructor TGroupPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csAcceptsControls];
end;