Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi t带底部对齐面板的StatusBar_Delphi_Alignment_Statusbar - Fatal编程技术网

Delphi t带底部对齐面板的StatusBar

Delphi t带底部对齐面板的StatusBar,delphi,alignment,statusbar,Delphi,Alignment,Statusbar,我有一个带有TStatusBar和底部对齐的TPanel、底部对齐的TSplitter和客户端对齐的TPanel的表单,如以下屏幕截图所示: (拆分器为红色,使其更加明显) 按钮1只是将面板1的高度增加20: Panel1.Height := Panel1.Height + 20; 但是,当单击时,控件的顺序会发生变化,Panel1将打开状态栏,拆分器现在正在调整状态栏的大小 只有当Panel1的高度增加超过StatusBar1(19)的高度时,才会发生这种情况 我假设这是由两个底部对齐的

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

(拆分器为红色,使其更加明显)

按钮1只是将面板1的高度增加20:

Panel1.Height := Panel1.Height + 20;
但是,当单击时,控件的顺序会发生变化,Panel1将打开状态栏,拆分器现在正在调整状态栏的大小

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

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

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


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

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

StatusBar1.Top := Panel1.Top + Panel1.Height;
试试这个(对我来说很好):


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

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;

巧妙而简单的解决办法。杰出的谢谢。这是个好主意,但我只在一个地方设置面板高度,所以我可以用更简单的方法。如果情况发生变化,我会牢记在心……我希望十四年后,波……临时……G码……Embarcadero会解决这个问题。
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;