如何自动将焦点恢复到我的应用程序

时间:2011-06-15 22:24:20

标签: forms delphi modal-dialog focus

我正在为我的应用设置一个简单的“启动菜单”,其中(有经验的)用户可以选中或取消选中各种运行选项。启动菜单是一个简单的无边框形式,以模态和

显示
  • 退出按钮
  • 继续按钮,以及
  • 启动选项复选框

我显示这个启动选项对话框,因为如果用户持有F8键我正在启动我的应用程序 - 我发现Windows不使用F8,所以你可以在点击我的exe的快捷方式时按住F8并打开我的启动对话框。这是探针。

我的表单不会成为活动应用程序 - 而是托管我单击的快捷方式的资源管理器窗口。如果我单击我的表单(启动对话框),它将获得焦点。如何让我的启动对话框从'拉'窗口聚焦到它?

1 个答案:

答案 0 :(得分:7)

一般来说,你无法集中注意力。来自Raymond Chen的Old New Thing博客:

  

......窗口管理器认为没有理由让第一个实例有权获取前景。没有证据表明第一个实例是在响应某些用户操作而进入前台。

     

有多种方法可以解决这个问题。最简单的方法就是......

  

......彻底窃取焦点是不对的......

     

...仅仅因为没有好办法做某事并不意味着你被自动允许以不好的方式去做。

问题是用户一直在为你的程序提供输入。你没有权利因为你想要它而获得焦点。

这可能不是你想要的答案,但它就是答案。微软一直在努力阻止试图窃取焦点的程序。您提出的任何解决方案都违反了规则,并且可能在将来的任何时候都无法使用。


  

...仅仅因为没有好办法做某事并不意味着你被自动允许以不好的方式去做。