delphi - 当操作管理器位于数据模块中时,键盘快捷键未捕获?

标签 delphi keyboard-shortcuts delphi-xe2 datamodule tactionmanager

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

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

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

最佳答案

TDataModule 不是 TCustomForm 的后代,而是 TComponent 的后代。因此,数据模块没有用于接收消息的窗口句柄,并且没有对诸如 TCustomForm 之类的快捷方式的处理。

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

  function DispatchShortCut(const Owner: TComponent) : Boolean;
  .....
  .....

关于delphi - 当操作管理器位于数据模块中时,键盘快捷键未捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099865/

相关文章:

delphi - 如何在一个应用程序中同时拥有 VCL 和 FMX?

c++ - 从 Delphi 应用程序调用时,如何修复 C++ DLL 中 MessageBox 中显示的无效字符?

delphi - 关于TMemIni的教程

keyboard-shortcuts - 如何摆脱 Aptana Ctrl-q 快捷键

keyboard-shortcuts - 在 SQL Management Studio 中更改 "Available databases"的键盘快捷键

delphi - winapinameA 与 winapinameW - Unicode 与 Ansi - Delphi XE2

Delphi - 如何检查字符串是否包含一组字符格式

delphi - 类型转换为动态数组

c++ - QShortcut 不工作

Delphi x64嵌入式数据库