В моем приложении 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 на модальный диалог ОТМЕНЯЕТ предполагаемый процесс выхода из приложения, но на самом деле происходит следующее: вы выдаете Не сохранять никаких изменений em > Команда и приложение завершают работу.
Я не замечал такого поведения, пока не потерял час работы таким образом. В код myModalDialogue не было помещено ни обработчика событий FormKeyPressed, ни чего-либо, отвечающего на нажатия клавиш. Просто так работает, что нажатие Esc в формах, показанных с использованием showModal
, вернет mrNo
. Как я могу изменить это поведение по умолчанию?