0

我创建了一个由 MainForm 和几个 MDIChild Forms 组成的应用程序。我正在使用 TMS 组件中的 AdvDockPanel 和 AdvToolbar。我的主窗体在窗体的顶部、底部、左侧和右侧都有 AdvDockPanel 以显示 AdvToolbars。

每个 MDIChild 表单都包含一个 AdvToolbar,在创建这些表单时,AdvToolbar.Parent 设置为 MainForm 上的 AdvDockPanel。起初,AdvToolbar.Visible 为 False,在激活每个 MDIChild 表单时,我将其可见性设置为 True。

总而言之,在激活 MDIChild 表单时,我希望它的 AdvToolbar 显示在 MainForm.AdvDockPanel 上,而在停用它时,我希望它隐藏。

这一切都很好,除非我尝试将 AdvToolbar 从一个 AdvDockPanel 拖动到另一个将穿过我的 MainForm 的中间,这使我的活动 MDIChild 表单隐藏并导致此错误:“无法在 OnShow 或 OnHide 中更改可见”。

我已经对其进行了调试,并找到了引发此异常的位置。它在 Vcl.Forms 中。过程 TCustomForm.CMShowingChanged(var Message: TMessage);

所以,我想知道是否有一种方法可以在 MainForm 上从我的活动 MDIChild 表单中显示 AdvToolbar,同时能够在我的 MainForm 中拖动我的工具栏。

谢谢,

  • 查尔斯
4

1 回答 1

1

您可以检查工具栏的当前父级是否是 TFloatingWindow(拖动工具栏时的父级):

procedure TForm25.FormDeactivate(Sender: TObject);
begin
   if not (orgaadvtoolbar1.Parent is TFloatingWindow) then
      OrgaAdvToolBar1.visible:=false;
end;

TAdvToolBar.Dragging 不起作用,因为 TAdvToolbar 使用自己的拖动标志 FDraging 但它不是属性,因此只有修改 TMS Software 的源代码才能访问该变量。

于 2012-05-22T18:01:41.957 回答