我已经找到了很多帮助来编写允许在这里隐藏组件的组件(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;
答案 0 :(得分:2)
这是因为FLargeWidth
私有字段的值无效。您在构造函数期间使用Self.Width
分配它(并且您可能永远不会更新它)。这是不您在设计时或运行时设置的宽度,但它是来自TCustomPanel.Create
的硬编码宽度,即185
。请注意,当运行控件的构造函数时,控件尚未放置。
如果您想记住设置的宽度,那么您应该“覆盖TControl.SetWidth
”。但由于该方法是私有的(非虚拟),因此您需要覆盖SetBounds
或Resize
以响应Width
的更改。我会选择后者,可能还有其他条件:
procedure THidePanel.Resize;
begin
if not HasCustomWidth then //< Replace this with your own logic condition
FLargeWidth := Width;
inherited Resize;
end;