【问题标题】:TStatusBar with bottom aligned panel底部对齐面板的 TStatusBar
【发布时间】:2011-12-26 22:20:31
【问题描述】:

我有一个带有TStatusBar、底部对齐TPanel、底部对齐TSplitter 和客户端对齐TPanel 的表单,如以下屏幕截图所示:

(分隔线被涂成红色以使其更加明显)

Button1 只是将 Panel1 的高度增加了 20:

Panel1.Height := Panel1.Height + 20;

但是当点击时,控件的顺序发生了变化,Panel1 正在吹动状态栏,而拆分器现在正在调整状态栏的大小。

仅当 Panel1 的高度增加超过 StatusBar1 的高度 (19) 时才会发生这种情况。

我认为这是由两个底部对齐的控件引起的,但我不知道问题的确切原因以及如何解决它。

我目前使用的是 XE2,但我在使用 D2010 时遇到了同样的问题。

在这种情况下,有没有办法将 Panel1 的高度设置为任意值,同时确保控件保持其预期位置?

【问题讨论】:

  • 我希望在十四年后,Bo... Impr... Code G... Embarcadero 会解决这个问题。

标签: delphi alignment statusbar


【解决方案1】:

通过在更改面板高度后设置控件的 Top 属性来解决此问题。

StatusBar1.Top := Panel1.Top + Panel1.Height;

【讨论】:

  • 一个非常简单的解决方案。优秀!谢谢。
【解决方案2】:

试试这个(对我来说很好):

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.SetBounds(Panel1.Left, Panel1.Top - 20,
                   Panel1.Width, Panel1.Height + 20);
end;

【讨论】:

    【解决方案3】:

    或者,如果您不想跟踪更改控件位置/大小的位置,

    type
      TForm1 = class(TForm)
        ..
      private
      protected
        procedure AlignControls(AControl: TControl; var Rect: TRect); override;
    
    ..
    
    procedure TForm1.AlignControls(AControl: TControl; var Rect: TRect);
    begin
      inherited;
      if AControl = Panel1 then
        StatusBar1.Top := Panel1.Top + Panel1.Height;
    end;
    

    【讨论】:

    • 一个好主意,但我只在一个地方设置面板高度,所以我可以使用更简单的东西。如果事情发生变化,我会记住的......
    猜你喜欢
    • 2019-07-26
    • 2016-04-26
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多