Was ich tun möchte, ist zu überprüfen, ob meine Anwendung den Fokus hat, denn wenn nicht, dann werde ich ein Alarmfenster direkt über dem Benachrichtigungsbereich öffnen, um dem Endbenutzer eine Nachricht anzuzeigen.
Antworten
Zu viele Anzeigen?Rufen Sie an. Windows.GetForegroundWindow()
und übergeben dann die HWND
à la Controls.FindControl()
Funktion. Sie gibt einen Wert zurück, der nicht Null ist. TWinControl
Zeiger, wenn der HWND
gehört zu Ihrem Prozess. Zum Beispiel:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
Wenn Ihre Bewerbung aus einem einzigen Formular besteht, dann
GetForegroundWindow = Handle
reicht aus. Der obige Ausdruck ist wahr, wenn und nur wenn das Formular das Vordergrundfenster ist, d.h. wenn der Tastaturfokus zu einem Steuerelement auf diesem Formular (oder zum Formular selbst) gehört.
Wenn Ihr Antrag aus mehreren Formularen besteht, können Sie diese einfach in einer Schleife durchgehen und prüfen, ob eines der Formulare übereinstimmt GetForegroundWindow
.
Eine leichte Abwandlung von Remys Antwort lautet:
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
kompiliert ok für mich, aber ich fand es unzuverlässig während Debug, die stringgrid.setfocus aufgerufen wird, auch wenn das Fenster nicht fokussiert ist, was einen Fehler.