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;