如何使用在设计时接受其他控件的子面板创建自定义控件?

Tho*_*ler 6 delphi custom-component

我编写了一个自定义控件,它有几个子面板.我希望这些子面板能够接受在设计时丢弃的任何其他控件.

不幸的是,在设计时掉落的任何控件都会在我的自定义控件上出现,而不是在面板上.这特别显示我是否尝试删除标签:标签的蓝点显示,但标题不是,如果我取消选择标签,则根本不再可见.

简化代码(只有一个子面板):

type
  TMyContainer = class(TPanel)
    p_SubPanel: TPanel;
  public
    constructor Create(_Owner: TComponent); override;
  end;

  constructor TMyContainer.Create(_Owner: TComponent);
  begin
    inherited;
    p_SubPanel := TPanel.Create(Self);
    p_SubPanel.Parent := Self;
    p_SubPanel.Align := alClient;
  end;
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

(以防万一重要:我使用的是Delphi 2007.)

[编辑]

我现在已经解决了不同的问题.该组件不再包含面板,但指的是外部面板.这使它实际上更加灵活,但在不利方面,它不再直观易用.

我仍然想知道如何完成我原先描述的内容.是不是有一个开源组件可以做到这一点,所以我可以研究源代码?

Tob*_*len 1

我无法从细节中看出,但是您是否将标签的父级设置为子面板?如果在设计时,您可能需要在主组件(例如面板所在的容器)中编写代码,以找出哪个子面板正在接受该组件并将标签父属性设置为该子面板。

我很确定当一个组件添加到另一个组件或从另一个组件中删除时,通知方法会被调用,这应该可以帮助您找到需要放置代码的位置。