gpt4 book ai didi

c++ - 模态对话框打开时无法聚焦 Firemonkey 应用程序,除非单击模态对话框本身

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:02 25 4
gpt4 key购买 nike

我有一个应用程序,用户在登录后会收到一个模态对话框提示,他们必须在其中选择他们希望使用的设施。在此阶段,应用程序如下所示:

enter image description here

通过调用此方法显示模式对话框:

bool __fastcall ShowFacChoiceForm()
{
TFacChoiceForm *Form = new TFacChoiceForm( Application );

bool Result = ( Form->ShowModal() == mrOk );

delete Form;

return Result;
}

在这种情况下,TFacChoiceForm 继承自 TForm,因此 ShowFacChoiceForm() 函数调用标准的 TForm.ShowModal方法documented here.

我遇到的问题是,如果我的应用程序失去焦点,除非单击模态对话框本身,否则它无法再次成为事件窗口。为了更好地说明这一点,我将展示以下场景:

假设是周五下午,我决定偷懒看一些网络漫画。打开我的应用程序后,我在它上面打开了另一个窗口,如下所示:

enter image description here

然后,我的老板不知从哪里冒出来进行绩效评估,我试图通过单击主表单上的某个位置来重新调整我的应用程序。比如下图中这个红色X的位置。

enter image description here

在上图中,我点击了红色 X 的位置。现在,包含网络漫画的表单和我的应用程序都处于非事件状态。因此,我的应用程序不会出现在屏幕前面。

但是,如果我能够单击模态对话框中的某处,如下图中的红色 X...

enter image description here

...然后我的申请就会像人们期望的那样出现在最前面。

enter image description here

为了解决这个问题,我研究过使用类似 SetForegroundWindow 的方法来自 Windows API,但我无法找到触发事件的方法,因为当我打开模式对话框时,我的主窗体不会触发事件。

我的问题是,如果用户在我的应用程序上的任何地方单击,我如何确保它被带到最前面?是否有我可以在我的表单中编辑的属性来执行此操作?

最佳答案

如果您在模态对话框的 ondeactivate 中将 modalresult 设置为 mrcancel,则主窗体将在单击时获得焦点。然后,您可以检查用户是否登录到主窗体的 mousedown 事件中,如果没有,则再次显示模态对话框。

关于c++ - 模态对话框打开时无法聚焦 Firemonkey 应用程序,除非单击模态对话框本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com