2

このシェブロン ツールバーを自分のアプリケーションに実装すると、完全にうまく機能します。しかし、メニューの項目をクリックすると、アプリケーションがフォーカスを失います。マウスをフォームの隅に移動しても、カーソルがサイズ変更ハンドルに変わりません。フォーカスを取り戻すためにフォームまたはアプリケーションをクリックする必要がありますが、その必要はありません。メニュー項目を呼び出した後に MainForm.Setfocus を呼び出しても役に立ちません。ユーザーが必要なことを行う前にフォームをクリックする必要がないように、アプリケーションに自動的にフォーカスを合わせたいと思います。

フォームやアプリケーションに集中する方法について何か考えはありますか?

ありがとう

4

1 に答える 1

-1

WM_KillFocus メッセージを傍受します。

疑似コード
はこの端末に Delphi を持っていません。ホームに戻ったら空白を埋めます。

type
  TForm1 = class(TForm)
  ...
  protected
    procedure WMKillFocus(message: TWM_Killfocus); message WM_KillFocus;
  ...

procedure TForm1.WMKillFocus(message: TWM_Killfocus);
begin
  //do stuff to prevent the focus from shifting.
  //do *NOT* call SetFocus, it confuses Windows/Delphi and leads to suffering
  //Call PostMessage or handle the KillFocus message
  //From MSDN
  //While processing this message, do not make any function calls that display
  //or activate a window. This causes the thread to yield control and can
  //cause the application to stop responding to messages. For more information 
  //see Message Deadlocks. 
  //Also don't use SendMessage, PostMessage is OK though.        

  //Suggestion:
  PostMessage(Self.handle, WM_SETFOCUS, 0, 0); 
end;
于 2011-04-14T13:49:16.820 に答える