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

8

Was ich tun möchte, ist zu überprüfen, ob meine Anwendung den Fokus hat. Wenn das nicht der Fall ist, öffne ich ein Benachrichtigungsfenster nur über dem Benachrichtigungsbereich, um eine Nachricht für den Endbenutzer anzuzeigen.

    
kirkdmo 14.09.2010, 20:16
quelle

4 Antworten

16

Rufen Sie Windows.GetForegroundWindow() auf und übergeben Sie dann HWND an die Funktion Controls.FindControl() . Es wird ein non-nil TWinControl -Zeiger zurückgegeben, wenn HWND zu Ihrem Prozess gehört. Zum Beispiel:

%Vor%     
Remy Lebeau 14.09.2010, 20:40
quelle
4

Wenn Ihre Anwendung aus einem einzigen Formular besteht,

%Vor%

wird ausreichen. 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 mehreren Formularen besteht, durchlaufen Sie sie einfach und überprüfen Sie, ob sie mit GetForegroundWindow übereinstimmen.

    
Andreas Rejbrand 14.09.2010 20:21
quelle
3

D2007 hat diese nützliche Eigenschaft

%Vor%     
Anton Duzenko 13.06.2016 14:38
quelle
0

Eine leichte Variation der Remys-Antwort ist:

%Vor%

kompiliert ok für mich, aber ich fand es unzuverlässig während des Debuggens, der stringgrid.setfocus wird aufgerufen, auch wenn das Fenster nicht fokussiert ist, was einen Fehler verursacht.

    
SolarBrian 25.09.2012 08:57
quelle