在Delphi Win32(VCL)中,我使用:

Application.OnMessage := MyAppMessage;


FireMonkey中的等效项是什么?

我有一个例程,需要捕获应用程序中(所有活动窗体控件上的)所有键盘和鼠标事件并进行处理。

最佳答案

我不知道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。

09-28 08:45