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

Langage Delphi Discussion :

fermeture de Fiche non modal


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Par défaut fermeture de Fiche non modal
    Bonjour,

    J'aurais besoin d'une précision sur les fermeture de Fiche non Modal:

    je ferme et libère la Form 2 de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    if Sender = Form2 then Action:=caFree;
    end;
     
    procedure TForm2.FormDestroy(Sender: TObject);
    begin
    if Sender=Form2 then Form2:=nil;
    end;
    Est ce que le code dans FormDestroy est utile ?

    L'appel a été fait comme ceci depuis Form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      form2:=Tform2.Create(Self);
      try
      form2.Show;
      except
      FreeAndNil(form2);


    Cordialement

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 148
    Par défaut
    Si tu mets Action:=caFree, la fenêtre sera automatiquement libérée après la fermeture.
    caFree : libère complètement la fiche (Destroy), mémoire rendue.
    caHide : cache la fiche, elle reste créée en mémoire.
    caMinimize : la fiche est minimisée.
    caNone : ignore la fermeture (la fiche reste ouverte).

    Pourquoi ces [if Sender = Form2] ?

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 717
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 717
    Par défaut
    Dans l'appel, ce n'est pas except, mais finally qu'il faudrait mettre.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 231
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      form2:=Tform2.Create(Self);
      try
      form2.Show;
      except
      FreeAndNil(form2);

    cela semble inspiré de sa variante modale évoquée par Lung mais il ne faut pas confondre les deux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      form2 := Tform2.Create(nil);
      try
      form2.ShowModal;
      finally
        FreeAndNil(form2);


    Il y a très peu de chance qu'une exception se produise sur le Show (en dehors d'une erreur de Focus peut-être), avec un Owner passé au Create, la libération est implicite.

    Il ne faut surtout pas de try finally sur un Show car cela fermera la fenêtre aussitôt ouverte, c'est ballot !




    En réalité, il faut se poser la question suivante "Que fais-je de form2 ?"

    form2 est une variable locale, inutile de s'encombrer donc Create(nil) + caFreeform2 est une variable privée de form1, Create(form1 if not Assigned + caNone pour maitriser la durée de vie
    form2 est une variable globale, Create(Application) si longue durée de vie ou Create(nil) + caFree + ref à nil si courte.


    A mon avis Form2 est une variable globale et c'est à 99% un mauvais choix !
    Même si l'affectation à nil dans le OnDestroy est plutôt bien vu pour gérer ce cas.
    Aide via F1 - Utilisez l'I.A. - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité ! Sachez-le : l'IA remplace la très grande majorité des développeurs, pas seulement les ignares ...

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/05/2021, 15h14
  2. Réponses: 5
    Dernier message: 14/03/2016, 10h25
  3. Fenêtre non modale : ouverture et fermeture
    Par morinxav1 dans le forum Débuter
    Réponses: 9
    Dernier message: 29/06/2011, 13h49
  4. Attente de fermeture d'une fenetre non modale
    Par argonath dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/08/2009, 15h41
  5. Rendre une fenêtre modale non modale
    Par Smortex dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/03/2003, 17h56

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