我有一个应用程序,用户在登录时会收到一个模态对话框提示,他们必须在其中选择他们希望工作的设施。在这个阶段,应用程序如下所示:
通过调用此方法显示模态对话框:
bool __fastcall ShowFacChoiceForm()
{
TFacChoiceForm *Form = new TFacChoiceForm( Application );
bool Result = ( Form->ShowModal() == mrOk );
delete Form;
return Result;
}
在这种情况下,TFacChoiceForm
继承自TForm
所以ShowFacChoiceForm()
函数调用此处记录的标准TForm.ShowModal
方法。
我遇到的问题是,如果我的应用程序失去焦点,除非单击模式对话框本身,否则它不能再次成为活动窗口。为了更好地说明这一点,我将展示以下场景:
假设现在是星期五下午,我决定放纵一下并阅读一些网络漫画。打开我的应用程序后,我会在其顶部打开另一个窗口,如下所示:
然后,我的老板不知从何而来进行绩效评估,我试图通过单击主窗体上的某个位置来重新调整我的应用程序。例如,在下一个图像中这个红色 X 的位置。
在上图中,我点击了红色 X 的位置。现在,包含网络漫画的表单和我的应用程序都处于非活动状态。因此,我的应用程序不会出现在屏幕前面。
但是,如果我能够单击模态对话框中的某个位置,例如下图中的红色 X...
...然后我的申请就会像人们期望的那样出现在前面。
为了解决这个问题,我已经研究过使用 Windows API 中的SetForegroundWindow之类的东西,但我无法找到触发事件的方法,因为我的主窗体在打开模式对话框时不会触发事件。
我的问题是,我如何确保如果用户单击我的应用程序上的任何位置,它会被带到前面?我可以在我的表单中编辑一个属性来执行此操作吗?