代码之家  ›  专栏  ›  技术社区  ›  rossmcm

带嵌入式框架的Toolbar2000大小问题

  •  0
  • rossmcm  · 技术社区  · 14 年前

    包含其他面板和各种控件。所以结构是:

    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有明确的高度大小,然后框架(以及工具栏)会自动调整大小以适应新的大小。

    点(例如,通过鼠标点击再次显式地调整面板高度)它是正确的。我试着调用例程两次设置大小,调用Update,Application.ProcessMessages应用程序,重新对齐-除了让主窗体绘制,然后再次手动执行调整大小之外,似乎什么都不起作用。

    我可以胡乱修改一些讨厌的东西,比如在计时器过期后显式地调整面板的大小,但我宁愿从源头上解决问题。

    你知道为什么会发生这种情况吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Sertac Akyuz    14 年前

    好吧,这并不是从源头上解决问题,而是一个快速解决办法。在窗体显示之前浮动一次该条将强制它计算所有控件对齐方式,停靠它将强制停靠执行相同的操作。这样地:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    
      // Insert frame to toolbar, etc..
    
      TBToolbar.Floating := True;
      TBToolbar.CurrentDock := TBDock;
    
        2
  •  1
  •   rossmcm    14 年前

    咬牙切齿之后,我解决了这个问题。当Canvas控件的一个属性被直接赋值时,这个控件的属性就变成了一个不对齐的控件控件.字体.高度. 计算框架内面板高度的部分代码在我指定后使用了字体高度。我需要补充一下:

    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 ; 
    

    谢谢你的关心和帮助。

    (答案和评论投了赞成票,因为。。因为我是个好人。)