来自MDIChild的AdvToolbar显示在MainForm上,可以将其全部拖动

时间:2012-05-22 14:38:17

标签: delphi delphi-xe2 toolbar mdi

我创建了一个由MainForm和几个MDIChild表单组成的应用程序。我正在使用来自TMS组件的AdvDockPanel和AdvToolbar。我的主窗体在Form的Top,Bottom,Left和Right侧有AdvDockPanels来显示AdvToolbars。

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

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

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

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

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

谢谢,

  • 查尔斯

1 个答案:

答案 0 :(得分:1)

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

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

TAdvToolBar.Dragging不起作用,因为TAdvToolbar使用自己的拖动标记FDraging但它不是属性,因此如果修改TMS软件的源代码,则只能访问该变量。