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 :

Utilisation OnCloseQuery !


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 599
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 599
    Par défaut Utilisation OnCloseQuery !
    Voici mon problème, à la fermeture de ma fiche, j'ai deux instructions comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
     
     If flagmodif then canclose := ecriture(false); //1
     
     Application.CreateForm(TFormexit, Formexit); //2
     
      if Formexit.Showmodal = mrOk then
        CanClose := true
      else CanClose := False;
     
    end;
    Je me demandais si cette façon de faire était logique car je n'ai pas de bug apparent.

    Merci de votre attention.

    @+,

    Cincap

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Disons que le premier CanClose ne sert à rien au retour de Ecriture puisque tu le réassignes plus bas.

    Ne devrais-tu pas afficher TFormExit que si l'écriture à réussie?
    De plus, FormExit n'est pas libérée si l'application n'est pas terminée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      If FlagModif then CanClose := Ecriture(false);
     
      if CanClose then
        with TFormExit.Create(nil) do
        begin
           CanClose := ShowModal = mrOk;
           Free;
        end;
    end;

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 599
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 599
    Par défaut Belle erreur !
    @ AndNotOr, j'ai une erreur à la fermeture de mon application, ma fiche exit contient aussi deux Tbuttons, un annuler et l'autre Ok avec respectivement modalresult mrnone et mrok.

    @+,

    Cincap

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 599
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 599
    Par défaut
    En fait je dois pouvoir dire oui ou non pour l'enregistrement et dans les deux cas, afficher la fiche de fermeture avec aussi le choix de dire annuler ou ok

    @+,

    Cincap

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 599
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 599
    Par défaut
    Avec ceci, cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Application.CreateForm(TFormexit, Formexit);
     
      if Formexit.Showmodal = mrOk then begin
     
        CanClose := true ;
        FlagModif := Ecriture(false) end
     
      else CanClose := False;
    Je vais attendre avant de mettre Résolu.

    @+,

    Cincap

  6. #6
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    La form n'est toujours pas libérée

    (je me permets de reprendre le code de Antnotor, pour le modifier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      If FlagModif then CanClose := Ecriture(false);
     
      with TFormExit.Create(nil) do
      begin
         CanClose := (ShowModal = mrOk);
         Release;
      end;

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    je comprend pas trop l'utilité de soit tu fait un truc du genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       Application.CreateForm(TFormexit, Formexit);// on lance la fenetre de fermeture dans tout les cas 
       if Formexit.Showmodal = mrOk then 
       begin // Si on repond ok 
         CanClose := Ecriture(false) ;// on valide les ecriture 
         FlagModif := not(CanClose);// on inverse le flagModif 
                                                //si on peut fermer cela veut dire qu'il n'y a  plus de modif en cours sinon c'est toujours en modif 
      end
      else
        CanClose := False;
    @+ Phil

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    Citation Envoyé par cincap Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Application.CreateForm(TFormexit, Formexit);
      if Formexit.Showmodal = mrOk then 
      begin
        CanClose := true ;
        FlagModif := Ecriture(false) 
      end
      else 
        CanClose := False;
    ...
    pour repondre a ta question la difference entre mon test est le tiens

    mon test permet de ne pas fermer la fenetre si l'ecriture ce passe mal
    dans ton cas dans tout les cas tu ferme et tu ne voi pas si l'enregistrement c'est mal passer

    ensuite la modification du flagmodif n'est la que pour le fun dans ton cas comme dans le mien celui-ci ne sert a rien du fait que tu ferme ta fenetre

    @+ Phil

  9. #9
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    je vais modifier ton code Andnotor,à mon gout
    Citation Envoyé par Andnotor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      CanClose :=FlagModif and Ecriture(false);
      if CanClose then
        with TFormExit.Create(application) do
        try
           CanClose := ShowModal = mrOk;
        finally
           Release;
        end;
    end;

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    le monsieur veut la fenêtre de confirmation de sortie a tous les coup
    dans ta démarche elle n'apparais que si elle est nécessaire
    c'est un choix de navigation

    @+ Phil

  11. #11
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    oui sa c'est vrai, mais j'ai modifier simplement le code de andnotor

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    @Edam
    J'y ai jeté un coup d'oeil, mais long débat pour pas grand chose

    Release est un Free asynchrone et ne fait strictement rien d'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Unit Forms;
    procedure TCustomForm.Release;
    begin
      PostMessage(Handle, CM_RELEASE, 0, 0);
    end;
     
    procedure TCustomForm.CMRelease;
    begin
      Free;
    end;
    Si un composant veut se libérer lui-même, oui il doit obligatoirement passer par un Release, sinon le retour de l'événement pointera sur une adresse devenue invalide !

    Dans le cas qui nous concerne, il n'y a aucune différence puisque la destruction se fait depuis la fiche principale (ou du moins est externe à TFormExit)

    Et je ne vois vraiment pas en quoi le propriétaire est impliqué dans ce processus

  13. #13
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    j'ai dis simplement qu'il y a une différence celons, le type de création on utilisant(application ou nil),l'utilisation , ....
    et pour le code, j'ai proposé le mien car c'est ce que j'utilise tout le temps

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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