2010-10-03 47 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