我想要做的是检查我的应用程序是否具有焦点,因为如果不是,那么我将在通知区域上方弹出警报窗口以向最终用户显示一些消息。
答案 0 :(得分:16)
致电Windows.GetForegroundWindow()
,然后将HWND
传递给Controls.FindControl()
功能。如果TWinControl
属于您的进程,它将返回一个非零HWND
指针。例如:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
答案 1 :(得分:4)
如果您的申请包含单一表格,则
GetForegroundWindow = Handle
就足够了。当且仅当您的表单是前景窗口时,即,如果键盘焦点属于此表单上的控件(或表单本身),上面的表达式才为真。
如果您的应用程序包含多个表单,只需循环遍历它们并检查它们是否与GetForegroundWindow
匹配。
答案 2 :(得分:4)
D2007有这个有用的属性
if Application.Active then
//
答案 3 :(得分:0)
Remys响应略有不同:
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
为我编译好了,但我发现它在调试期间不可靠,即使窗口没有聚焦导致错误,也会调用stringgrid.setfocus。