В моем приложении Delphi у меня есть пользовательский диалог Да, Нет, Отмена, который будет вызываться из основной формы для подтверждения сохранения изменений, внесенных в текущий отредактированный файл. Это обычно достигается с помощью messageDlg (), но я хотел, чтобы этот диалог имел настраиваемый внешний вид, поэтому я пытаюсь добиться этой функциональности с помощью
case myDialogue.showModal of
mrYes: <<save changes>>;
mrNo: <<quit application without saving changes>>
mrCancel: <<set the closeAction to caNone and do nothing>>
end;
Проблема в том, что по умолчанию форма реагирует на нажатие клавиши Escape, возвращая mrNo TModalResult
. И вы можете видеть, как это BAAAD, так как ваша интуиция говорит вам, что Esc-aping модального диалога ОТМЕНИТ предполагаемый процесс выхода из приложения, но на самом деле, что происходит, вы запускаете Не сохраняйте никаких изменений команда и приложение закрываются.
Я не замечал такого поведения, пока не потерял час работы таким образом. Ни один обработчик события FormKeyPressed или что-либо , отвечающее на нажатия клавиш, не было помещено в код myModalDialogue. Просто так получается, что нажатие клавиши Esc в формах, показанных с помощью showModal
, вернет mrNo
. Как я могу переопределить это поведение по умолчанию?