THidepanel @ runtime

时间:2013-04-09 14:19:23

标签: delphi

我已经找到了很多帮助来编写允许在这里隐藏组件的组件(THIDEPANEL。现在我遇到了第一个问题:

在本课程的OnCreate事件中,我采用了面板的宽度和高度,我希望在隐藏/取消隐藏面板时恢复原始值。实际上,隐藏过程总是会减小面板的大小

constructor THidePanel.Create(AOwner: TComponent);
begin
  inherited;

  // The inner panel
  WorkingPanel := TPanel.Create(Self);
  WorkingPanel.Caption := '***';

  // The hide unhide
  FActivateButton := TButton.Create(Self);
  FActivateButton.Parent := self;
  FActivateButton.Caption := '<';
  FActivateButton.OnClick := H_ActivateButtonClick;
  FActivateButton.Width := BoarderSize;
  FActivateButton.Height := BoarderSize;
  WorkingPanel.Caption := '';

  // Grab the size of the hide panel, later restore to this values
  FLargeWidth := Self.Width;
  FLargeHeight := Self.Height;

  SetButtonPosition(TopRight);
end;

1 个答案:

答案 0 :(得分:2)

这是因为FLargeWidth私有字段的值无效。您在构造函数期间使用Self.Width分配它(并且您可能永远不会更新它)。这是您在设计时或运行时设置的宽度,但它是来自TCustomPanel.Create的硬编码宽度,即185。请注意,当运行控件的构造函数时,控件尚未放置。

如果您想记住设置的宽度,那么您应该“覆盖TControl.SetWidth”。但由于该方法是私有的(非虚拟),因此您需要覆盖SetBoundsResize以响应Width的更改。我会选择后者,可能还有其他条件:

procedure THidePanel.Resize;
begin
  if not HasCustomWidth then  //< Replace this with your own logic condition
    FLargeWidth := Width;
  inherited Resize;
end;