2010-09-14 43 views

Trả lời

16

Gọi Windows.GetForegroundWindow() và sau đó chuyển HWND tới chức năng Controls.FindControl(). Nó sẽ trả về một con trỏ không phải là TWinControl nếu số HWND thuộc về quá trình của bạn. Ví dụ:

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

Nếu ứng dụng của bạn bao gồm một hình thức duy nhất, sau đó

GetForegroundWindow = Handle 

sẽ đủ. Biểu thức ở trên là đúng nếu và chỉ khi biểu mẫu của bạn là cửa sổ nền trước, tức là, nếu tiêu điểm bàn phím thuộc về điều khiển trên biểu mẫu này (hoặc chính biểu mẫu).

Nếu ứng dụng của bạn bao gồm một số biểu mẫu, chỉ cần lặp qua các biểu mẫu đó và kiểm tra xem có bất kỳ biểu mẫu nào trong số đó phù hợp với GetForegroundWindow hay không.

0

Một biến thể nhẹ trên Remys phản ứng là:

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

biên soạn ok đối với tôi, nhưng tôi thấy nó không đáng tin cậy trong gỡ lỗi, các stringgrid.setfocus được gọi ngay cả khi cửa sổ isn' t tập trung gây ra lỗi.

3

D2007 có thuộc tính hữu ích này

if Application.Active then 
// 
Các vấn đề liên quan