在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。