如何将自定义控件的子项限制在某个区域?

时间:2013-04-10 11:23:04

标签: delphi

我有一个基于TPanel的自定义控件,它有一个内部面板,用于定义组件的工作区域,外部区域用"最小化/恢复"按钮隐藏并显示(内部)面板。

如果我在设计时将一个组件放在我的控件上并将其Align属性设置为alClient,则会使用外部面板的大小,并且不再显示最小化按钮。

如何在面板上对齐或放下组件以强制它们(留在)内面板区域内?

screen shot showing region of inner frame, where children belong

1 个答案:

答案 0 :(得分:3)

将按钮放在自己的面板上,该面板不接受其他控件并将其保持在前面,但缺点是可以覆盖其他控件。

procedure THidePanel.AdjustClientRect(var Rect: TRect);
begin
  inherited;
  FPanel.BringToFront;
end;

constructor THidePanel.create(AOwner: TComponent);
begin
  inherited;
  FPanel := TPanel.Create(self);
  FPanel.Align := alright;
  FPanel.Parent := self;
  FPanel.BevelOuter := bvNone;
  FPanel.Width := 30;
  FButton:=TSpeedButton.Create(self);
  FButton.Parent := FPanel;
  FPanel.ControlStyle := FPanel.ControlStyle - [csAcceptsControls];
end;