我有一个较大的 Delphi 6应用程序,我已经移植到Delphi XE 3。(比如说50%)一两秒钟后,新创建的窗体移动到主窗体的后面。即使它现在在后面,新创建的表单仍然有焦点,所以没有激活/停用事件。2有一些计时器控件,我已经禁用了它们。3它仍然发生。我可以接受我的代码正在做这件事--但是我怎么才能发现发生了什么呢?有没有一种方法可以在新表单移到后面时拦截它呢?先说清楚我希望这两种形式可以分开使用。它们中的任何一个都可以出现在另一个的后面。目前正在发生的是z顺序似乎正在发生变化。
hwazgwia1#
我遇到了同样的问题,我用这种方式解决了它:Project - View source 并将Application.MainFormOnTaskbar设置为False。
begin Application.Initialize; Application.MainFormOnTaskbar:=**False**; Application.CreateForm(Tdm, dm); Application.CreateForm(TLogin, Login); Application.Run; end.
wmomyfyw2#
我已经找到了这个问题的答案。我发现我添加了一个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解决了这个问题。效果很奇怪。就好像有一个计时器在任何键或鼠标事件后大约一秒钟关闭,迫使窗口在其他窗口后面。感谢大卫Heffernan,他关于单步执行CreateParam的注解让我注意到了这一点。
2条答案
按热度按时间hwazgwia1#
我遇到了同样的问题,我用这种方式解决了它:Project - View source 并将Application.MainFormOnTaskbar设置为False。
wmomyfyw2#
我已经找到了这个问题的答案。我发现我添加了一个CreateParams覆盖,它可以做到这一点:
注解WndParent解决了这个问题。效果很奇怪。就好像有一个计时器在任何键或鼠标事件后大约一秒钟关闭,迫使窗口在其他窗口后面。感谢大卫Heffernan,他关于单步执行CreateParam的注解让我注意到了这一点。