Сочетания клавиш не обнаруживаются, когда 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;
.....
.....