我的表单中包含TStatusBar
,底部对齐TPanel
,底部对齐TSplitter
,客户端对齐TPanel
,如下面的屏幕截图所示:
(分离器的颜色为红色,使其更加明显)
Button1只是将Panel1的高度增加20:
Panel1.Height := Panel1.Height + 20;
但是当点击控件的顺序发生变化时,Panel1会打开状态栏,分割器现在正在调整状态栏的大小。
仅当Panel1的高度增加超过StatusBar1(19)的高度时才会发生这种情况。
我认为这是由两个底部对齐的控件引起的,但我对问题的确切原因以及如何解决它感到茫然。
我目前正在使用XE2,但我对D2010也有同样的问题。
在这种情况下,有没有办法将Panel1的高度设置为任意值,同时确保控件保持其预期位置?
答案 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;