2010-09-14 14 views

Antwort

16

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

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.

0

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.

3

D2007 hat diese nützliche Eigenschaft

if Application.Active then 
// 
Verwandte Themen