2010-10-03 43 views
0

我有喬丹羅素的Toolbar2000工具欄,我在運行時使用嵌入式TFrame創建並在應用程序主窗體上停靠。該框架具有嵌入式窗格,該窗格依次包含其他面板和各種控件。因此,結構爲:具有嵌入式框架的Toolbar2000的大小問題

TTBDock 
    TTBToolbar 
    TFrame  (align=alNone, Autosize=true) 
     TPanel 1  (align=alNone, Autosize=true) 
     TPanel 2  (align=alTop ,Autosize = false) 
     TPanel 3  (align=alTop ,Autosize = false) 
     TPanel 4  (align=alTop , Autosize = false) 

的想法是,板2,3,4具有它們的高度尺寸顯式地與框架(並因此在工具欄),然後自動調整大小,以適應新的大小。

它工作正常,只是工具欄的大小錯誤,第一次工具欄顯示停靠在應用程序主窗體上。如果我在該點強制改變工具欄的大小(例如,通過從鼠標單擊再次明確調整TPanel高度),它就會出現。我已經嘗試調用例程來設置大小兩次,調用Update,Application.ProcessMessages,ReAlign - 除了讓主窗體繪製然後再次手動執行大小調整之外,沒有任何東西可以工作。

如果我在調整大小例程結束時中斷並檢查面板大小和框架大小,它們是正確的,但工具欄大小不是,所以第一次顯示時,框架部分顯示爲錯誤 - 中型工具欄。它會在接下來的調用大小例程之後,但是隻有在主表單自己繪製之後。

我可能會搞砸一些令人討厭的事情,比如在計時器到期後明確調整面板大小,但我寧願在源頭解決問題。

任何想法爲什麼這可能會發生(或沒有發生)?

回答

1

那麼,這不是從源頭上解決問題,但可以快速解決。在顯示錶單之前將條形圖浮動一次將迫使它計算所有控件的對齊方式並停靠它會強制碼頭執行相同操作。就像這樣:

procedure TForm1.FormCreate(Sender: TObject); 
begin 

    // Insert frame to toolbar, etc.. 

    TBToolbar.Floating := True; 
    TBToolbar.CurrentDock := TBDock; 
1

牙多少咬牙切齒後,我解決了這個。這個問題是由於一個控件和一個Control的畫布的字體屬性在分配給Control.Font.Height時不會直接對齊。計算框架內的面板高度的代碼的一部分在分配給它之後使用了字體高度。我需要補充:

RequiredValueFontHeight := blah blah.. ; 
FFrame.ALabel.Font.Height := RequiredValueFontHeight ; 
FFrame.ALabel.Canvas.Font := FFrame.ALabel.Font ; // I needed to add this line 

Panel.Height    := RequiredValueFontHeight + Panel.Padding.Top + Panel.Padding.Bottom ; 

無論如何感謝您的關注和幫助。

(答案和評論投票,因爲..嗯,因爲我是個好人。)

+0

恕我直言,你應該接受你自己的答案,因爲我的文章涉及到的解決方法,而不是解決方案。 :) – 2010-10-11 09:29:42