Всё. Разобрался.
Ошибка возникает только если при нажатии горячей клавиши фокус ввода находится в одном из уничтожаемых объектов. А возникает исключение из-за того, что после завершения обработчика FormKeyDown делается попытка отдать нажатую клавишу на обработку уже уничтоженному объекту.
Просто нужно пресекать попытку отдать на обработку нажатую клавишу если она уже была тобой обработана как горячая клавиша.
Например так:
Код:
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (key = 78) then
begin
NewModul;
Key := 0;
end;
end;
Или так:
Код:
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (key = 78) then
begin
NewModul;
Abort;
end;
end;