带嵌入式框架的Toolbar2000尺寸问题

时间:2010-10-03 20:59:22

标签: delphi toolbar delphi-2006 autosize tframe

我有Jordan Russel的Toolbar2000工具栏,我在运行时使用嵌入式TFrame创建并在应用程序主窗体上停靠。该框架具有嵌入式窗格 包含其他面板和各种控件。所以结构是:

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 - 除了让主窗体绘制然后再次手动执行调整外,似乎没什么用。

如果我在调整大小例程结束时中断并检查面板大小和帧大小,它们是正确的,但工具栏大小不正确,所以第一次显示时,框架部分显示的大小错误工具栏。它是在调整了大小调整例程之后,但只有在主窗体自行绘制之后才会出现。

我可以克服一些令人讨厌的事情,比如在计时器到期后明确调整面板的大小,但我宁愿在它的来源解决问题。

关于为什么会发生这种情况(或没有发生)的任何想法?

2 个答案:

答案 0 :(得分:1)

嗯,这不是从源头解决问题,但可能是一个快速修复。在显示表单之前将栏浮动一次将强制它计算所有控件对齐和对接,这将迫使基座执行相同操作。像这样:

procedure TForm1.FormCreate(Sender: TObject);
begin

  // Insert frame to toolbar, etc..

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

答案 1 :(得分:1)

在咬牙切齿之后,我解决了这个问题。问题是由于控件和控件的画布的Font属性在分配给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 ; 

感谢您的关注和帮助。

(答案和评论被投了票,因为......好吧,因为我是一个好人。)