我想要做的是检查我的应用程序是否具有焦点,因为如果没有焦点,那么我将弹出一个警报窗口,覆盖在通知区域上,向最终用户显示一些信息。
我想要做的是检查我的应用程序是否具有焦点,因为如果没有焦点,那么我将弹出一个警报窗口,覆盖在通知区域上,向最终用户显示一些信息。
调用 Windows.GetForegroundWindow()
函数,然后将 HWND
参数传递给 Controls.FindControl()
函数。如果 HWND
属于你的进程,它将返回一个非空的 TWinControl
指针。例如:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
if Application.Active then
//
GetForegroundWindow = Handle
只有当您的窗体是前景窗口时,上面的表达式才为真,也就是说,如果键盘焦点属于此窗体上的控件(或窗体本身)。
如果您的应用程序由多个窗体组成,只需循环遍历它们并检查是否有任何一个与 GetForegroundWindow
匹配即可。
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
对我来说编译没问题,但在调试期间发现它不可靠,即使窗口没有焦点,也会调用stringgrid.setfocus导致错误。