我正在尝试创建复合组件 TTreePage(后代形式 TCustomControl)。它应该包含 3 个子组件:Treeview (TTreeview) align:=alLeft、Splitter (TSplitter) align:=alLeft 和 Container (TPanel) align:=alClient。
这是构造函数:
constructor TTreePage.Create(AOwner: TComponent);
begin
inherited;
FTreeview := TTreeView.Create(self);
FTreeview.SetSubComponent(True);
InsertControl(FTreeview);
FSplitter := TSplitter.Create(self);
FSplitter.SetSubComponent(True);
FSplitter.Width := 3;
FSplitter.Color := clBlack;
InsertControl(FSplitter);
FContainer:= TPanel.Create(Self);
FContainer.SetSubComponent(True);
FContainer.BevelInner := bvNone;
FContainer.BevelOuter := bvNone;
FContainer.Color := clYellow;
InsertControl(FContainer);
RefreshLayout; // this performs alignment of subcomponents
end;
这是创建参数过程:
procedure TTreePage.CreateParams(var Params:TCreateParams);
begin
inherited;
Params.Style := Params.Style + WS_EX_CONTROLPARENT;
ControlStyle := ControlStyle + [csAcceptsControls, csCaptureMouse, csOpaque];
end;
整个组件表现为一个单独的块。我无法通过鼠标选择任何子组件(TTreeview、TSplitter 或 TPanel)。是的,我可以在 Object Inspector 中编辑它们的属性,但我不能编辑例如 TTreeview 的宽度或拖动 TSplitter。对我来说最重要的是在设计时在 TTreeview 中添加节点,但我无法为此调用 Tree 节点编辑器。
我应该怎么办?
谢谢