2010-09-14 21 views

Odpowiedz

16

Zadzwoń pod Windows.GetForegroundWindow(), a następnie przekaż HWND do funkcji Controls.FindControl(). Zwróci wskaźnik zerowy TWinControl, jeśli HWND należy do twojego procesu. Na przykład:

if FindControl(GetForegroundWindow()) <> nil then 
    // has focus ... 
else 
    // does not have focus ... 
4

Jeśli aplikacja składa się z jednego formularza, a następnie

GetForegroundWindow = Handle 

wystarczy. Powyższe wyrażenie jest prawdziwe wtedy i tylko wtedy, gdy formularz jest oknem pierwszego planu, tzn. Jeśli fokus klawiatury należy do formantu w tym formularzu (lub do samego formularza).

Jeśli aplikacja składa się z kilku formularzy, po prostu przeprowadź przez nie pętle i sprawdź, czy któryś z nich pasuje do GetForegroundWindow.

0

Nieznaczne odchylenie od odpowiedzi Remys jest:

Var 
    Win: TWinControl; 
Begin 
    Win := FindControl(GetForegroundWindow); 
    if Win <> nil then 
//  StringGrid1.Row :=5; 
//  StringGrid1.SetFocus; 

skompilowany dla mnie ok, ale okazało się to niewiarygodne podczas debugowania The stringgrid.setfocus nazywa nawet gdy okno ISN” t focused, powodując błąd.

3

D2007 ma tę właściwość przydatnych

if Application.Active then 
// 
Powiązane problemy