Was ich tun möchte, ist zu überprüfen, ob meine Anwendung den Fokus hat, denn wenn es nicht ist, werde ich ein Benachrichtigungsfenster nur über dem Benachrichtigungsbereich anzeigen, um eine Nachricht an den Endbenutzer anzuzeigen.Wie kann ich überprüfen, ob meine Anwendung den Fokus hat?
Antwort
Rufen Sie Windows.GetForegroundWindow()
an und übergeben Sie dann die HWND
an die Controls.FindControl()
-Funktion. Es wird einen Zeiger TWinControl
nicht-Null zurückgeben, wenn die HWND
zu Ihrem Prozess gehört. Zum Beispiel:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
Wenn die Anwendung einer einzigen Form besteht, dann
GetForegroundWindow = Handle
genügt. Der obige Ausdruck ist genau dann wahr, wenn das Formular das Vordergrundfenster ist, dh wenn der Tastaturfokus zu einem Steuerelement in diesem Formular (oder zum Formular selbst) gehört.
Wenn Ihre Anwendung aus einer Reihe von Formularen besteht, durchlaufen Sie sie einfach und überprüfen Sie, ob sie mit GetForegroundWindow
übereinstimmen.
Eine leichte Abwandlung Remys Antwort ist:
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
ok für mich zusammengestellt, aber ich fand es während der Debug-unzuverlässig wird die stringgrid.setfocus auch wenn das Fenster isn‘genannt t fokussiert, was einen Fehler verursacht.
D2007 hat diese nützliche Eigenschaft
if Application.Active then
//