让我在IDE中控制的组件成为我控制的孩子

时间:2015-07-04 11:46:05

标签: delphi controls delphi-2009

我有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我找到了解决方案。)

1 个答案:

答案 0 :(得分:6)

csAcceptControls设置ControlStyle标记。

constructor TGroupPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csAcceptsControls];
end;