4

Delphi Win32 (VCL) では、次を使用します。

Application.OnMessage := MyAppMessage;

FireMonkey で同等のものは何ですか?

アプリケーション (すべてのアクティブなフォーム コントロール) のすべてのキーボードおよびマウス イベントをキャッチし、それらを処理する必要があるルーチンがあります。

4

3 に答える 3

6

FireMonkeyはクロスプラットフォームであり、Windows、Mac OSX、iOS、そして間違いなく他の多くのプラットフォームで動作します。したがって、FireMonkeyによって公開されるWindowsメッセージはありません。

VCLで行うことに慣れているものは何でもOnMessage、FireMonkeyで同等のものを持っている可能性があります。OnMessageその同等物が正確に何であるかは、ハンドラーが達成しようとしていることに大きく依存します。

于 2011-11-08T21:52:41.867 に答える
6

FireMonkey で、プラットフォームに依存しない方法でアプリケーション レベルでマウスとキーボードのイベントをキャプチャする方法を知りません。Delphi XE 2 Update 2 の時点では、まだ実装されていないと思います。

ただし、デフォルトでは、FireMonkey フォームは、コントロールよりも先にすべての MouseDown イベントと KeyDown イベントを取得します。

フォームの MouseDown イベントと KeyDown イベントをオーバーライドするだけで、同じことが実現します。

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override;
    procedure KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); override;
  end;

{ TForm1 }

procedure TForm1.KeyDown(var Key: Word; var KeyChar: System.WideChar;
  Shift: TShiftState);
begin
  // Do what you need to do here
  ShowMessage('Key Down');
  // Let it pass on to the form and control
  inherited;
end;

procedure TForm1.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Single);
begin
  // Do what you need to do here
  ShowMessage('Mouse Down');
  // Let it pass on to the form and control
  inherited;
end;

必要に応じて、MouseMove、MouseUp、MouseWheel、MouseLeave、KeyUp、DragEnter、DragOver、DragDrop、および DragLeave を使用して続行できます。

于 2011-11-09T19:31:36.853 に答える
0

これらの回答は、公開されたイベントには問題ありませんが、他のあいまいなシステムイベントには、より注意が必要です。これを書いている時点では、このリンクは回答されていません。

キャプチャ-usb-plug-unplug-events-in-firemonkey

しかし、それは一般的な問題を解決するのに役立ちます。


私はこれを回答ではなくコメントとして投稿したでしょうが、以前の回答はそれ以上のコメントを受け付けていませんでした。

于 2012-11-23T01:18:43.673 に答える