2011-12-26 62 views
5

我有一個TStatusBar形式,並且底部對齊TPanel,底部對齊TSplitter和客戶端對齊TPanel,如圖以下截圖:TStatusBar與底部對齊面板

Screen Shot 1 - Before - Good

(分離器是染成紅色,以使其更有點明顯)

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

Panel1.Height := Panel1.Height + 20; 

但是當點擊時,控件的順序會改變,Panel1正在吹動狀態欄,分離器現在正在調整狀態欄的大小。

Screen Shot 2 - After - Bad

這僅當Panel1的的高度超過StatusBar1中的高度(19)增加了發生。

我認爲這是由兩個底部對齊的控件造成的,但我對這個問題的確切原因以及如何解決這個問題感到不知所措。

我目前正在使用XE2,但我與D2010有同樣的問題。

在這種情況下,有沒有辦法將Panel1的高度設置爲任意值,同時確保控件保持其預期位置?

+0

我希望在十四年後,Bo ... Impr ... Code G ... Embarcadero會修正這個問題。 – 2014-12-18 21:39:26

回答

5

在更改面板高度後,通過設置控件的Top屬性解決該問題。

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

狡猾的簡單解決方案。優秀!謝謝。 – davea 2011-12-27 18:03:20

3

嘗試這(對我工作的罰款):

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

也是一個很好的解決方案。謝謝。 – davea 2011-12-27 18:03:40

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; 
+0

一個絕妙的想法,但我只在一個地方設置面板高度,所以我可以更簡單一些。如果事情發生變化,我會記住它... – davea 2011-12-27 18:04:30