Quello che voglio fare è controllare se la mia applicazione ha il focus, perché se non lo è, aprirò una finestra di avviso proprio sopra l'area di notifica per visualizzare un messaggio all'utente finale.Come posso verificare se la mia applicazione ha il focus?
risposta
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 ...
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
.
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.
D2007 ha questa proprietà utile
if Application.Active then
//