Delphi 如何检查我的应用程序是否有焦点?
我想做的是检查我的应用程序是否有焦点,因为如果没有焦点,我将在通知区域上方弹出一个警报窗口,向最终用户显示一些消息。如果应用程序由单个表单组成,则Delphi 如何检查我的应用程序是否有焦点?,delphi,winapi,vcl,notification-area,Delphi,Winapi,Vcl,Notification Area,我想做的是检查我的应用程序是否有焦点,因为如果没有焦点,我将在通知区域上方弹出一个警报窗口,向最终用户显示一些消息。如果应用程序由单个表单组成,则 GetForegroundWindow = Handle 就够了。当且仅当窗体是前景窗口时,即当键盘焦点属于此窗体上的控件(或窗体本身)时,上述表达式才成立 如果您的应用程序由许多表单组成,只需循环检查它们是否匹配getForeGroundIndow调用Windows.getForeGroundIndow(),然后将HWND传递给控件.FindCo
GetForegroundWindow = Handle
就够了。当且仅当窗体是前景窗口时,即当键盘焦点属于此窗体上的控件(或窗体本身)时,上述表达式才成立
如果您的应用程序由许多表单组成,只需循环检查它们是否匹配
getForeGroundIndow
调用Windows.getForeGroundIndow()
,然后将HWND
传递给控件.FindControl()
函数。如果HWND
属于您的进程,它将返回一个非nilTWinControl
指针。例如:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
如果FindControl(getForeGroundIndow())为nil,则
//有焦点。。。
其他的
//没有焦点。。。
Remys响应的细微变化是:
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
Var
赢:双控;
开始
Win:=FindControl(GetForegroundWindow);
如果赢了,那就输了
//StringGrid1.行:=5;
//StringGrid1.SetFocus;
编译对我来说还可以,但我发现它在调试期间不可靠,即使窗口没有聚焦导致错误,也会调用stringgrid.setfocus D2007有这个有用的属性
if Application.Active then
//