【问题标题】:Problem with size of a Toolbar2000 with an embedded Frame带有嵌入式框架的 Toolbar2000 的大小问题
【发布时间】:2011-04-20 13:50:15
【问题描述】:

我有 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 - 除了让主窗体绘制然后再次手动执行调整大小之外,似乎没有任何效果。

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

我可以拼凑一些讨厌的东西,比如在计时器到期后显式调整面板的大小,但我宁愿从源头解决问题。

关于为什么这可能发生(或不发生)的任何想法?

【问题讨论】:

    标签: delphi toolbar delphi-2006 autosize tframe


    【解决方案1】:

    嗯,这并不能从源头上解决问题,但可以快速解决。在您的表单显示之前将条浮动一次将强制它计算所有控件对齐并且停靠它会强制停靠栏执行相同操作。像这样:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    
      // Insert frame to toolbar, etc..
    
      TBToolbar.Floating := True;
      TBToolbar.CurrentDock := TBDock;
    

    【讨论】:

      【解决方案2】:

      在咬牙切齿之后,我解决了这个问题。问题是由于当分配给 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 ; 
      

      感谢您的关注和帮助。

      (答案和 cmets 投票是因为……嗯,因为我是个好人。)

      【讨论】:

      • 恕我直言,您应该接受自己的答案,因为我的帖子涉及解决方法,而不是解决方案。 :)
      猜你喜欢
      • 2022-07-28
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多