2010-09-14 16 views

risposta

16

Chiamare Windows.GetForegroundWindow() e quindi passare il HWND alla funzione Controls.FindControl(). Restituirà un puntatore non zero TWinControl se lo HWND appartiene al tuo processo. Per esempio:

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

Se l'applicazione è costituita da un unico modulo, quindi

GetForegroundWindow = Handle 

sarà sufficiente. L'espressione sopra è vera se e solo se il tuo form è la finestra in primo piano, cioè se il focus della tastiera appartiene a un controllo su questo modulo (o al modulo stesso).

Se l'applicazione è costituita da un numero di moduli, è sufficiente scorrere ciclicamente e verificare se uno di essi corrisponde a GetForegroundWindow.

0

Una leggera variazione della risposta Remys è:

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

compilato ok per me, ma ho trovato inaffidabile durante il debug, la stringgrid.setfocus viene chiamato anche quando la finestra isn' t focalizzato causando un errore.

3

D2007 ha questa proprietà utile

if Application.Active then 
//