0

我有一个较大的 Delphi 6 应用程序,已移植到 Delphi XE3。在某一时刻,主表单会启动另一种非模态表单。有时(比如 50%)在一两秒后新创建的表单会移动到主表单后面。即使它现在在后面,新创建的表单仍然具有焦点,因此没有激活/停用事件。有一些计时器控件,我已禁用它们。它仍然发生。

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

需要明确的是:我希望两种形式分别使用。它们中的任何一个都可以出现在另一个后面。目前正在发生的事情是 z 顺序似乎正在发生变化。

4

1 回答 1

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 的评论让我注意到了这一点。

于 2013-04-11T13:30:02.737 回答