Показать сообщение отдельно
  #16  
Старый 19.12.2013, 15:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Curen
http://zalil.ru/34859382 - тут листинг программы в txt файле
http://zalil.ru/34859386 - на всякий случай проект полностью в архиве
Всё. Разобрался.
Ошибка возникает только если при нажатии горячей клавиши фокус ввода находится в одном из уничтожаемых объектов. А возникает исключение из-за того, что после завершения обработчика 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;
Ответить с цитированием