FireMonkey эквивалентен Application.OnMessage? - PullRequest
4 голосов
/ 09 ноября 2011

В Delphi Win32 (VCL) я использую:

Application.OnMessage := MyAppMessage;

Что такое эквивалент в FireMonkey?

У меня есть подпрограмма, которая должна перехватывать все события клавиатуры и мыши вприложение (на все активные элементы управления формы) и обрабатывать их.

Ответы [ 3 ]

6 голосов
/ 09 ноября 2011

FireMonkey является кроссплатформенным и работает на Windows, Mac OSX, iOS и, без сомнения, на многих других платформах в свое время. Поэтому нет сообщений Windows, выставляемых FireMonkey.

Независимо от того, что вы привыкли делать с OnMessage в VCL, скорее всего, есть аналог в FireMonkey. Что именно соответствует этому эквиваленту, во многом зависит от того, чего пытается достичь ваш обработчик OnMessage.

5 голосов
/ 09 ноября 2011

Я не знаю, как в 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.

0 голосов
/ 23 ноября 2012

Эти ответы хороши для открытых событий, но для других непонятных системных событий это более сложно.На момент написания этой ссылки нет ответа:

capturing-usb-plug-unplug-events-in-firemonkey

но это поможет в решении общей проблемы.Я бы написал это как комментарий, а не как ответ, но предыдущие ответы не принимали дальнейших комментариев.

...