我有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 - 除了让主窗体绘制然后再次手动执行调整外,似乎没什么用。
如果我在调整大小例程结束时中断并检查面板大小和帧大小,它们是正确的,但工具栏大小不正确,所以第一次显示时,框架部分显示的大小错误工具栏。它是在调整了大小调整例程之后,但只有在主窗体自行绘制之后才会出现。
我可以克服一些令人讨厌的事情,比如在计时器到期后明确调整面板的大小,但我宁愿在它的来源解决问题。
关于为什么会发生这种情况(或没有发生)的任何想法?
答案 0 :(得分:1)
嗯,这不是从源头解决问题,但可能是一个快速修复。在显示表单之前将栏浮动一次将强制它计算所有控件对齐和对接,这将迫使基座执行相同操作。像这样:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Insert frame to toolbar, etc..
TBToolbar.Floating := True;
TBToolbar.CurrentDock := TBDock;
答案 1 :(得分:1)
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 ;
感谢您的关注和帮助。
(答案和评论被投了票,因为......好吧,因为我是一个好人。)