带底部对齐面板的TStatusBar

时间:2011-12-26 22:20:31

标签: delphi alignment statusbar

我的表单中包含TStatusBar,底部对齐TPanel,底部对齐TSplitter,客户端对齐TPanel,如下面的屏幕截图所示:

Screen Shot 1 - Before - Good

(分离器的颜色为红色,使其更加明显)

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

Panel1.Height := Panel1.Height + 20;

但是当点击控件的顺序发生变化时,Panel1会打开状态栏,分割器现在正在调整状态栏的大小。

Screen Shot 2 - After - Bad

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

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

我目前正在使用XE2,但我对D2010也有同样的问题。

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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;