Сочетания клавиш не обнаруживаются, когда Action Manager находится в модуле данных?

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

Причина создания такого модуля данных заключается в том, что все различные формы приложения могут использовать компоненты внутри него, в частности, диспетчер действий. Он должен быть создан до того, как будет создана основная форма.

Как заставить сочетания клавиш элементов действий работать, когда диспетчер действий находится в модуле данных?

1 ответ

Решение

TDataModule не является потомком TCustomForm, а скорее TComponent, Таким образом, модуль данных не имеет дескриптора окна для получения сообщений и не обрабатывает такие ярлыки, как TCustomForm,

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

  function DispatchShortCut(const Owner: TComponent) : Boolean;
  .....
  .....
Другие вопросы по тегам