10 Stimmen

Wie kann ich überprüfen, ob meine Anwendung den Fokus hat?

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.

18voto

Remy Lebeau Punkte 498719

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 ...

5voto

Anton Duzenko Punkte 1970

D2007 hat diese nützliche Eigenschaft

if Application.Active then
//

4voto

Andreas Rejbrand Punkte 100651

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 .

0voto

Hamish_Fernsby Punkte 548

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X