delphi 形式移动到后面并保持活跃

omjgkv6w  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(89)

我有一个较大的 Delphi 6应用程序,我已经移植到Delphi XE 3。(比如说50%)一两秒钟后,新创建的窗体移动到主窗体的后面。即使它现在在后面,新创建的表单仍然有焦点,所以没有激活/停用事件。2有一些计时器控件,我已经禁用了它们。3它仍然发生。
我可以接受我的代码正在做这件事--但是我怎么才能发现发生了什么呢?有没有一种方法可以在新表单移到后面时拦截它呢?
先说清楚我希望这两种形式可以分开使用。它们中的任何一个都可以出现在另一个的后面。目前正在发生的是z顺序似乎正在发生变化。

hwazgwia

hwazgwia1#

我遇到了同样的问题,我用这种方式解决了它:Project - View source 并将Application.MainFormOnTaskbar设置为False。

begin
  Application.Initialize;
  Application.MainFormOnTaskbar:=**False**;
  Application.CreateForm(Tdm, dm);
  Application.CreateForm(TLogin, Login);
  Application.Run;
end.
wmomyfyw

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

相关问题