让 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;