IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Confirmation avant de fermer une fenetre [FAQ]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut Confirmation avant de fermer une fenetre
    Bonsoir,

    sur l'une des fiches de mon appli, je voudrais mettre une confirmation de fermeture. c'est à dire lorsque l'utilisateur clic sur la croix, un message doit apparaitre demandant si on est bien sur de vouloir fermer cette fenetre avec dessous 2 boutons : Fermer et Annuler. Si le choix est confirmé, alors seulement on ferme la fenetre.

    Quelqu'un peut il m'aider, je n'ai rien trouver pouvant m'aider en faisant une recherche sur le forum .......

    merci

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    sur l'événement OnCloseQuery de la fiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
       int answer = MessageDlg("Êtes vous certain de vouloir quitter ?",mtConfirmation,TMsgDlgButtons() << mbYes << mbNo,0);
       if (answer == mbYes) {
          CanClose = true;
       } else if (answer == mbNo) {
          CanClose = false;
       }
    }
    Bon courage !

    Eric

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    merci,

    sauf que ça ne foctionne pas !

    Que je clic yes ou no, la fenetre se ferme quand même dans les deux cas ........

  4. #4
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Ricky81 a juste fait une petite erreur sur les valeurs retournées par MessageDlg.

    Il s'agit de constantes mr, et pas mb.

    Le code correct est donc le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
       int answer = MessageDlg("Êtes vous certain de vouloir quitter ?",mtConfirmation,TMsgDlgButtons() << mbYes << mbNo,0);
       if (answer == mrYes) {
          CanClose = true;
       } else if (answer == mrNo) {
          CanClose = false;
       }
    }

  5. #5
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Ou encore, pour les puristes, en une seule instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    CanClose=(MessageDlg("Êtes vous certain de vouloir quitter?",
              mtConfirmation,
              TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes);
    }
    À bientôt
    Gilles

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Mea culpa.

    Mais bizarrement je me souviens très bien avoir testé le code avant de le poster. Pourtant en reprenant le code tel quel ca ne marche plus. Mystère

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    Merci à tous, maintenant ça marchel super

    Pour ma culture perso (et dans ce domaine y a encore de quoi faire) c'est quoi la différence entre les mb et les mr ?

  8. #8
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    mb (b = button), ce sont les constantes permettant d'indiquer quels boutons afficher.
    mr (r = response), ce sont les constantes permettant d'indiquer quel bouton a été cliqué.

    si mbYes est indiqué, le bouton Yes sera présent. Si on le clique, la fonction MessageDlg retourne mrYes.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    merci, tout devient plus lumineux .....

    Mon appli étant multilangue je peux aussi changer l'affichage de mbYes et mbNo en fonction de la langue sélectionnée ?

  10. #10
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Non, malheuresement, les libellés des boutons sont pris dans le Consts.pas, et donc dépendent de la langue de Delphi.

    Pour faire traduire les boutons automatiquement par la langue de Windows, il faudra utiliser Application->MessageBox.

    Si tu veux être indépendant de la langue de Windows, il te faudra créer tes Form de dialogue à la main.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    domage .... mais merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing] fermer une fenetre enfant avec un bouton.
    Par TheSeb dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 23/11/2013, 12h42
  2. Fermer une fenetre sans confirmation depuis IE7
    Par Dos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/04/2011, 16h44
  3. Réponses: 1
    Dernier message: 18/02/2009, 17h39
  4. processus : fermer une fenêtre IE spécifique
    Par s.grenet dans le forum Général Conception Web
    Réponses: 11
    Dernier message: 26/08/2005, 13h41
  5. Comment fermer une Fenetre Modal avec Code ?
    Par Soulama dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo