2009-04-18 13 views
3

私のDelphiアプリケーションでは、編集中のファイルに加えられた変更を保存するためにメインフォームから呼び出されるカスタムのYes、No、Cancelダイアログがあります。これは通常messageDlg()によって達成されるであろうが、私はルックスをカスタマイズしたのが、この対話を望んでいたので、デフォルトでは、フォームがエスケープキーを押しに反応する、ということです私はform.showModalのデフォルトのモーダル結果を変更する

case myDialogue.showModal of 
    mrYes: <<save changes>>; 
    mrNo: <<quit application without saving changes>> 
    mrCancel: <<set the closeAction to caNone and do nothing>> 
end; 

問題によってこの機能を実現しようとしていますキーを返すことによってmrNoTModalResult。そしてあなたはBAAADがどのようになっているかを知ることができます。モーダルダイアログをエスケープすると、意図したアプリケーション終了プロセスがキャンセルされますが、実際には何が起こるのでしょうか?変更を保存しないコマンドとアプリケーションを終了します。 。

私はこのような方法で1時間の仕事を失うまで、この動作に気付きませんでした。 FormKeyPressedイベントハンドラまたは何もキープレスに応答するは、myModalDialogueコードに入れられませんでした。 showModalを使って表示されたフォームでEscを押すと、mrNoが返されます。このデフォルト動作をどのように上書きできますか?

答えて

15

"いいえ"ボタンのCancelプロパティがFalseで、 "Cancel"ボタンのCancelプロパティがTrueであることを確認する必要があります。

+0

これは機能しました。ありがとう!正しい答えは –

4

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

+0

+1です。ありがとう、私はそれがとてもシンプルだったとは信じられません...そして、私はこれを修正しようとするナットを行っていた... –

関連する問題