【问题标题】:Programmatically setting a docked toolbar’s location以编程方式设置停靠工具栏的位置
【发布时间】:2013-11-14 08:24:13
【问题描述】:

我正在尝试重置 TControlBar 内的一组工具栏位置。用户可以拖动工具栏并取消停靠它们。我正在尝试创建将重新排列工具栏的重置按钮是一种预设方式。

我无法按照我想要的顺序重置工具栏。 ManualDock 调用的结果似乎会因代码执行前的排列方式而异。

我有 4 个工具栏,我想像这样排列成两行:

[工具栏1][工具栏2] [工具栏3][工具栏4]

我尝试了以下代码的变体但没有成功:

// I found some references to different docking issues when controls were visible
// Hide everything first and then show them in the order I want them added.
Toolbar1.Visible := false;
Toolbar2.Visible := false;
Toolbar3.Visible := false;
Toolbar4.Visible := false;

ToolBar1.Visible := true;
ToolBar1.ManualDock(DockSite);
ToolBar1.Left := 0;

Toolbar2.Visible := true;
Toolbar2.ManualDock(DockSite, Toolbar1, alRight);

Toolbar3.Visible := true;
Toolbar3.ManualDock(DockSite, Toolbar1, alBottom);
Toolbar3.Left := 0;

Toolbar4.Visible := true;
Toolbar4.ManualDock(DockSite, Toolbar3, alRight);

屏幕上的结果会有所不同,具体取决于我的代码执行之前工具栏的启动位置。

我尝试了几种不同的方法 - 在手动停靠调用后设置工具栏的顶部和左侧 - alLeft/alTop 而不是上面的选项 - 在 ManualDock 调用中使用 Nil 作为第二个参数并将所有内容设置为 alTop

我尝试只使用 2 个工具栏来强制它们出现在同一行(并排)或两行。同样,我的结果也有所不同,具体取决于我的代码执行之前工具栏的起始位置。

【问题讨论】:

    标签: delphi vcl delphi-xe3


    【解决方案1】:

    隐藏、停靠、设置位置和显示应该会导致预期的结果。

    begin
      ToolBar1.Visible := false;
      ToolBar2.Visible := false;
      ToolBar3.Visible := false;
      ToolBar4.Visible := false;
      ToolBar1.ManualDock(ControlBar1);
      ToolBar2.ManualDock(ControlBar1);
      ToolBar3.ManualDock(ControlBar1);
      ToolBar4.ManualDock(ControlBar1);
    
      ToolBar1.Left := 0;
      ToolBar1.Top := 0;
      ToolBar2.Left := ToolBar1.Width;
      ToolBar2.Top := 0;
      ToolBar3.Left := 0;
      ToolBar3.Top := MAX(ToolBar1.Height, ToolBar2.Height);
      ToolBar4.Left := ToolBar3.Width;
      ToolBar4.Top := ToolBar3.Top;
    
      ToolBar1.Visible := true;
      ToolBar2.Visible := true;
      ToolBar3.Visible := true;
      ToolBar4.Visible := true;
    end;
    

    【讨论】:

    • 这对我有用。在此代码和我的代码之间尝试不同的选项,关键似乎是在更改其左侧和顶部位置之前在 所有 工具栏上调用 ManualDock。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2015-08-26
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多