10

アプリケーションにフォーカスがあるかどうかを確認します。フォーカスがない場合は、通知領域のすぐ上にアラートウィンドウをポップアップして、エンドユーザーにメッセージを表示します。

4

4 に答える 4

18

を呼び出してから、関数Windows.GetForegroundWindow()に渡します。がプロセスに属している場合は、 nil以外のポインタを返します。例えば:HWNDControls.FindControl()TWinControlHWND

if FindControl(GetForegroundWindow()) <> nil then
  // has focus ...
else
  // does not have focus ...
于 2010-09-14T20:40:04.240 に答える
5

D2007にはこの便利なプロパティがあります

if Application.Active then
//
于 2016-06-13T14:38:15.680 に答える
4

アプリケーションが単一のフォームで構成されている場合は、

GetForegroundWindow = Handle

十分であろう。上記の式は、フォームがフォアグラウンドウィンドウである場合、つまりキーボードフォーカスがこのフォームのコントロール(またはフォーム自体)に属している場合にのみ当てはまります。

アプリケーションが複数のフォームで構成されている場合は、それらをループして、それらのいずれかが一致するかどうかを確認しますGetForegroundWindow

于 2010-09-14T20:21:42.423 に答える
0

Remysの応答のわずかなバリエーションは次のとおりです。

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

コンパイルは問題ありませんが、デバッグ中に信頼性が低いことがわかりました。ウィンドウがフォーカスされていない場合でもstringgrid.setfocusが呼び出され、エラーが発生します。

于 2012-09-25T08:57:04.430 に答える