2010-09-14 4 views
8

Что я хочу сделать, это проверить, имеет ли мое приложение фокус, потому что, если это не так, я вывожу окно предупреждения поверх области уведомлений, чтобы отобразить какое-либо сообщение конечному пользователю.Как проверить, имеет ли мое приложение фокус?

ответ

16

Позвоните Windows.GetForegroundWindow(), а затем передайте HWND в функцию Controls.FindControl(). Он вернет указатель non-nil TWinControl, если HWND принадлежит вашему процессу. Например:

if FindControl(GetForegroundWindow()) <> nil then 
    // has focus ... 
else 
    // does not have focus ... 
4

Если приложение состоит из одной формы, а затем

GetForegroundWindow = Handle 

будет достаточно. Вышеприведенное выражение истинно тогда и только тогда, когда ваша форма является окном переднего плана, то есть если фокус клавиатуры относится к элементу управления этой формы (или к самой форме).

Если ваша заявка состоит из нескольких форм, просто проведите через них и проверьте, соответствует ли какой-либо из них GetForegroundWindow.

0

Небольшое изменение в ответ Remys является:

Var 
    Win: TWinControl; 
Begin 
    Win := FindControl(GetForegroundWindow); 
    if Win <> nil then 
//  StringGrid1.Row :=5; 
//  StringGrid1.SetFocus; 

компилируется нормально для меня, но я нашел его ненадежным во время отладки, то stringgrid.setfocus вызывается даже когда окно ISN» t сфокусировано, вызывая ошибку.

3

D2007 имеет это полезное свойство

if Application.Active then 
// 
Смежные вопросы