1

在 Delphi XE2 中,我的应用程序中有一个数据模块,该数据模块中有一个动作管理器。我已经为每个操作分配了键盘快捷键,但是当我尝试在应用程序中使用这些快捷键时,它并没有捕捉到它们。

我正在应用程序的初始化中创建数据模块(由于项目主文件中的 IDE 扭曲代码,它被移动到不同的单元)......

unit AppInit;

interface

uses
  Vcl.Forms,
  Vcl.Themes,
  Vcl.Styles,
  uMain,
  uDataModule
  ;

procedure RunApp;

implementation

procedure RunApp;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := 'My App';
  TStyleManager.TrySetStyle('Carbon');
  DM:= TDM.Create(nil);
  try
    Application.CreateForm(TfrmMain, frmMain);
    Application.Run;
  finally
    DM.Free;
  end;
end;

end.

像这样创建数据模块的原因是应用程序的所有各种形式都能够使用其中的组件,特别是动作管理器。它必须在创建主窗体之前创建。

当操作管理器位于数据模块中时,如何使操作项的键盘快捷键起作用?

4

1 回答 1

5

TDataModule不是 的后代TCustomForm,而是的后代TComponent。因此数据模块没有接收消息的窗口句柄,也没有处理TCustomForm.

function TCustomForm.IsShortCut(var Message: TWMKey): Boolean;

  function DispatchShortCut(const Owner: TComponent) : Boolean;
  .....
  .....
于 2012-12-31T13:17:32.647 回答