Delphi 身体向后移动,保持活力

Delphi 身体向后移动,保持活力,delphi,vcl,delphi-xe3,z-order,delphi-6,Delphi,Vcl,Delphi Xe3,Z Order,Delphi 6,我有一个较大的Delphi6应用程序,已移植到DelphiXE3。在某一点上,主窗体启动另一个非模态窗体。有时(比如说50%)在一两秒钟后,新创建的表单移到主表单后面。即使它现在在后面,新创建的表单仍然有焦点,因此没有激活/停用事件。有几个定时器控件,我已经禁用了它们。这种情况仍然存在 我可以接受我的代码正在这样做——但我如何才能知道发生了什么?当新表单移到后面时,有没有办法拦截 我只想说清楚:我希望这两种形式可以分开使用。其中任何一个都可以出现在另一个后面。现在发生的事情是,z顺序似乎正在改变

我有一个较大的Delphi6应用程序,已移植到DelphiXE3。在某一点上,主窗体启动另一个非模态窗体。有时(比如说50%)在一两秒钟后,新创建的表单移到主表单后面。即使它现在在后面,新创建的表单仍然有焦点,因此没有激活/停用事件。有几个定时器控件,我已经禁用了它们。这种情况仍然存在

我可以接受我的代码正在这样做——但我如何才能知道发生了什么?当新表单移到后面时,有没有办法拦截


我只想说清楚:我希望这两种形式可以分开使用。其中任何一个都可以出现在另一个后面。现在发生的事情是,z顺序似乎正在改变。

我已经找到了答案。我发现我添加了一个CreateParams覆盖,它可以:

  // make a taskbar window
 inherited CreateParams( params );
 params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
 params.WndParent := GetDesktopwindow; // this line caused the problem

对WndParent的评论并没有解决这个问题。不过,效果很奇怪。这就好像有一个计时器在任何键或鼠标事件后约一秒钟关闭,迫使窗口落后于其他窗口。感谢David Heffernan,他关于stepping CreateParam的评论让我注意到了这一点。

请您提供一个完整的程序来演示这个问题。好的-我已经试着给出了一些答案。这是一个典型的delphi问题,问题的名称就是
PopupMode
PopupArent
失败的原因添加到Delphi 2007。如果不是最新的unicode版本,我郑重建议升级到2007年。我们以前在Unicode中使用TNT Unicode控件,效果很好。Raymond Chen曾写过让桌面窗口成为您的所有者的危险。您也不需要添加应用程序窗口样式。只需将WndParent设置为0。任务栏上将显示无主顶级窗口。感谢您的帮助