2

我正在尝试重置 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 而不是上面的选项 - 使用 Nil 作为 ManualDock 调用中的第二个参数并将所有内容设置为 alTop

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

4

1 回答 1

3

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

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;
于 2013-11-03T22:48:03.843 回答