2010-09-14 17 views

Respuesta

16

Llame Windows.GetForegroundWindow() y pase el HWND a la función Controls.FindControl(). Devolverá un puntero que no sea nulo TWinControl si el HWND pertenece a su proceso. Por ejemplo:

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

Si su aplicación consiste en un único formulario, entonces

GetForegroundWindow = Handle 

será suficiente. La expresión anterior es verdadera si y solo si su formulario es la ventana de primer plano, es decir, si el foco del teclado pertenece a un control en este formulario (o al formulario mismo).

Si su aplicación consiste en una serie de formularios, simplemente recorra y compruebe si alguno de ellos coincide con GetForegroundWindow.

0

Una ligera variación en la respuesta Remys es:

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

compilado bien para mí, pero me pareció poco fiable durante la depuración, la stringgrid.setfocus se llama incluso cuando la ventana ISN' t centrado causando un error.

3

D2007 tiene esta propiedad útil

if Application.Active then 
// 
Cuestiones relacionadas