私の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;
問題は、デフォルトでは、フォームがmrNo TModalResult
を返すことによってEscapeキーを押したときに反応することです。そして、これがどのようにBAAADであるかを確認できます。これは、モーダルダイアログをエスケープすると目的のアプリケーションの終了プロセスがキャンセルされることを直感的に示しているためですが、実際には、[変更を保存しない]コマンドを発行してアプリケーションを終了します。
この方法で1時間の作業を失うまで、この動作に気づきませんでした。FormKeyPressedイベントハンドラーまたはキーの押下に応答するものは、myModalDialogueコードに入れられませんでした。を使用して示されているフォームでEscキーを押すと、showModal
が返されるように機能しますmrNo
。このデフォルトの動作をオーバーライドするにはどうすればよいですか?