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

 Delphi Discussion :

CloseQuery ne ferme pas la fenêtre


Sujet :

Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut CloseQuery ne ferme pas la fenêtre
    Bonjour à tous,
    Mon problème est simple :
    J'ai une fenêtre, et je souhaite que si l'utilisateur ferme la fenêtre alors qu'il a modifié quelque chose, une petite boite de dialogue lui demande s'il souhaite enregistrer ses modifications ou pas. Jusque là rien de bien sorcier.
    Sauf que tout en se passe pas comme prévu :
    Premier cas : il n'a rien modifié, il ferme la fiche => pas de message de confirmation => ça c'est ok c'est normal
    Deuxième cas : il a modifié quelque chose, une boite de dialogue s'affiche => il répond oui => et là bha ma fenêtre ne se ferme pas !!!

    J'ai essayé de mettre CanClose à true etc mais rien y fait ... la seule solution que j'ai trouvé c'est à la fin de mon CloseQuery faire Close() mais cela ne me convient pas du tout (a moins de ne pas avoir le choix ?) :


    Voici mon code (enfin la partie qui nous intéresse) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    procedure TfrmCalibrageCamera.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
      if (fModifie and (MessageDlg( 'Voulez-vous enregistrez ces nouveaux paramètres avant de fermer ?',
                                   mtConfirmation,
                                   [mbYes,mbNo],
                                   0) = mrYes)) then    btEnregistrer.Click();
     
      ResetEvent(fEventPrisePhoto);
      delierComposantsCamera();
      // CanClose := true;   Ne change rien
      // Close;   Fonctionne mais a mon avis y'a mieux à faire
    end;
     
     
    procedure TfrmCalibrageCamera.btEnregistrerClick(Sender: TObject);
    begin
      fModifie := false;
      if btAppliquer.Enabled then btAppliquer.Click();
      btAppliquer.Enabled := false;
      btEnregistrer.Enabled := false;
      fThreadsCamera[fNumSelect].EnregistrerParametresCamera('./camera'+IntToStr(fNumSelect)+'.ini');
    end;
     
     
     
     
    procedure TfrmCalibrageCamera.btAppliquerClick(Sender: TObject);
    begin
      with fThreadsCamera[fNumSelect] do
      begin
        SetVideoFormat(StrToInt(cbVideoFormat.Text));
        SetVideoMode(StrToInt(cbVideoMode.Text));
        SetHauteur(StrToFloat(edHauteur.Text));
        SetFocale(StrToFloat(edFocale.Text));
        SetAngle(StrToFloat(edAngle.Text));
        SetXPositionCamera(seXPosition.Value);
        SetYPositionCamera(seYPosition.Value);
        SetTailleCamera(seXTaille.Value,seYTaille.Value);
        InitialiserCamera();
        ResetCamera();
      end; // with
      btAppliquer.Enabled := false;
    end;

    Voila comme ça vous avez tout ce qu'il faut



    Merci à quiconque pourra m'aider
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  2. #2
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Juste pour comprendre : qu'est ce qui te gêne dans le fait de faire un Close ?
    Cela a-t-il des conséquences sur le reste de l'appli ?
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  3. #3
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Non cela n'a aucune conséquence mais pour moi (après à vous de me dire si j'interprète mal le fonctionnement de CloseQuery) c'est un peu anormal de faire un Close dans un CloseQuery puisque l'action CloseQuery est elle même déclenché par Close ... En gros je tourne en rond dans l'appli ...

    Non ?
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Je viens de faire un test de mon côté avec les éléments que tu nous a donné et je ne rencontre pas le problème que tu as énoncé.

    Nous as-tu donné tous les éléments ?

    - La form en question est-elle embarquée dans un autre composant ?

    - Quand tu débugges pas à pas ne passes-tu pas deux fois dans le onCloseQuery ?

    - Ajoute quelque chose dans le OnClose, puis met lui un point d'arrêt puis débugge. Que se passe-t-il ?

    J'aurais tendance à faire ces différents test car normalement le onCloseQuery fonctionne parfaitement.

    Par ailleurs, j'ai une petite remarque pourquoi n'inclus tu pas le cancel dans le onCloseQuery comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    const
      CMESSAGE : string
          = 'Voulez-vous enregistrer ces nouveaux paramètres avant de fermer ?';
    var
      reponse: word;
    begin
      CanClose := True;
      if FModifie then
      begin
        reponse := MessageDlg(CMESSAGE,mtConfirmation, [mbYes,mbNo,mbCancel],0);
        case reponse of
          mrYes   : btEnregistrer.Click();
          mrCancel: CanClose := False;
        end;
      end;
    end;
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par Pascal Jankowski Voir le message

    - La form en question est-elle embarquée dans un autre composant ?
    Merci pour cette phrase ça ma permis de trouver mon erreur :
    ma forme n'est pas dans un nouveau composant mais elle est créé dynamiquement via showModal => j'avais oublié de donner un ModalResult à ma sortie ... Mais le comportement était tout de même bizarre puisque sans jamais en définir, j'arrivais à sortir ... Bref


    Par ailleurs, j'ai une petite remarque pourquoi n'inclus tu pas le cancel dans le onCloseQuery comme cela:
    Tout à fait bonne remarque ... C'est modifié




    Merci pour ton aide
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

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

Discussions similaires

  1. Ma fenêtre ne se ferme pas sous FF et Chrome
    Par verbose dans le forum Wicket
    Réponses: 5
    Dernier message: 05/03/2010, 17h22
  2. [TortoiseSVN] La fenêtre Commit ne se ferme pas
    Par HomoErectus dans le forum Subversion
    Réponses: 0
    Dernier message: 29/01/2010, 16h12
  3. Sous IE la fenêtre ne se ferme pas lorsqu'elle perd le focus
    Par anca2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2009, 18h56
  4. [WD14] Fenêtre qui ne ferme pas
    Par Gaetch dans le forum WinDev
    Réponses: 2
    Dernier message: 09/07/2009, 16h49
  5. Réponses: 3
    Dernier message: 22/08/2006, 12h35

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