3

私の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。このデフォルトの動作をオーバーライドするにはどうすればよいですか?

4

2 に答える 2

15

[いいえ]ボタンの[キャンセル]プロパティがFalseであり、[キャンセル]ボタンの[キャンセル]プロパティがTrueであることを確認する必要があります。

于 2009-04-18T09:37:51.187 に答える
4

ダイアログのボタンの[キャンセル]プロパティと[デフォルト]プロパティを設定します。

于 2009-04-18T09:38:31.793 に答える