2009-04-18 8 views
3

Dans mon application Delphi, j'ai un dialogue personnalisé Oui, Non, Annuler, qui sera appelé à partir du formulaire principal pour confirmer l'enregistrement des modifications apportées au fichier en cours édité. Cela devrait normalement être atteint par MessageDlg() mais je voulais que ce dialogue ont des regards sur mesure, donc je suis en train de réaliser cette fonctionnalité parModification du résultat modal par défaut d'un formulaire.showModal

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

Le problème est que, par défaut, le formulaire réagit à appuyer sur l'Escape clé en renvoyant mrNoTModalResult. Et vous pouvez voir comment cela est BAAAD, puisque votre intuition vous dit que Esc-aping le dialogue modal annulera le processus de demande de Quitter prévu, mais en fait ce qui se passe est Ne pas enregistrer les modifications quitte la commande et l'application se ferme .

Je n'ai pas remarqué ce comportement jusqu'à ce que j'ai perdu une heure de travail de cette façon. Aucun gestionnaire d'événement FormKeyPressed ou quoi que ce soit répondant aux touches n'a été inséré dans le code myModalDialogue. Cela fonctionne si bien qu'appuyer sur la touche Esc dans les formulaires affichés en utilisant showModal renverra mrNo. Comment puis-je remplacer ce comportement par défaut?

Répondre

15

Vous devez vous assurer que la propriété Cancel du bouton "No" est False et que la propriété Cancel du bouton "Cancel" est True.

+0

cela a fonctionné. Merci! –

4

Définissez les propriétés Annuler et Par défaut des boutons de votre boîte de dialogue.

+0

+1 pour une réponse correcte. Merci, je ne peux pas croire que c'était si simple ... Et je devenais fou en essayant de résoudre ce problème ... –

Questions connexes