我有一个大型的Delphi 6应用程序,我已移植到Delphi XE3。在某一点上,主窗体启动另一种非模态形式。有时(比如50%)在一两秒之后,新创建的表单移动到主表单后面。即使它现在在后面,新创建的表单仍然具有焦点,因此没有激活/停用事件。有几个Timer控件,我已经禁用它们。它仍然发生。
我可以接受我的代码正在执行此操作 - 但我怎样才能知道发生了什么?当新表格移到后面时,有没有办法拦截?
请注意:我希望两个表单分开使用。其中任何一个都可以出现在另一个之后。目前发生的事情是z顺序似乎正在发生变化。
答案 0 :(得分:0)
我找到了答案。我发现我添加了一个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,他对踩踏CreateParam的评论让我注意到了它。