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 :

form toujours allouée avec un release


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 696
    Points : 225
    Points
    225
    Par défaut form toujours allouée avec un release
    Bonjour,

    J'ai une form que je créer dynamiquement :

    ECR_CALENDRIER := TFECR_CALENDRIER.Create(Nil);
    Lorsque je cloture cet écran :

    ECR_CALENDRIER.Release ;
    lorsque que je rappel mon calendier

    je constate que ECR_CALENDRIER <> nil par contre tous les composants de cette fiche son bien à nil ???

    Auriez vous une idée

    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 696
    Points : 225
    Points
    225
    Par défaut
    BONJOUR,

    faut il utiliser FreeAndNil(ECR_CALENDRIER) ?

    Cordialement

  3. #3
    Membre chevronné

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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    La form est bien libérée mais le pointeur est toujours sur l'ancien emplacement mémoire.

    Le FreeAndNil est déconseillé pour une Form, il y a plusieurs discussions là-dessus sans avoir vraiment de raisons autre que le conseil de Borland, il me semble (peut-être le traitement des messages)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Linkin
    Le FreeAndNil est déconseillé pour une Form, il y a plusieurs discussions là-dessus sans avoir vraiment de raisons autre que le conseil de Borland, il me semble (peut-être le traitement des messages)
    C'est exactement ça: Release permet de terminer tous les messages destinés à la fiche avant de la détruire.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 696
    Points : 225
    Points
    225
    Par défaut
    bonjour,

    j'ai trouvé un autre solution :

    My_Form.Release;
    My_Form := Nil;
    Je n'ai plus de problème, par contre cela ne semble pas propre.

    qu'en pensez-vous ?

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par QAYS
    Je n'ai plus de problème, par contre cela ne semble pas propre.
    Je ne vois pas pourquoi Rien n'empêche de mettre nil à une variable
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par QAYS
    bonjour,

    j'ai trouvé un autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    My_Form.Release;
    My_Form := Nil;
    Je n'ai plus de problème, par contre cela ne semble pas propre.

    qu'en pensez-vous ?
    Citation Envoyé par Pedro
    Je ne vois pas pourquoi Rien n'empêche de mettre nil à une variable
    Salut!

    Il y a 2 notions à saisir ici.

    Release() est une méthode qui indique à Windows que la fiche n'est plus utilisée et que la mémoire peut êre libérée. Windows, quand bon lui semble, détruit alors la fiche et indique à ton application de détruire ce qu'elle contient.

    Toutefois, ce n'est pas parce que l'objet qu'est la fiche a été détruit que le pointeur (la variable Form1, ou My_Form dans ton exemple) se voit soudainement vidé. Même si l'instance de la fiche est détruite en mémoire, la variable contient toujours l'adresse originale de cette dernière. Donc, comme le précise Pedro, c'est une bonne chose, dans ta situation, que de vider ta variable après avoir détruit ton objet. Perso, je ne trouve pas que cette technique manque de propreté. Si tu as besoin de tester l'état de My_Form c'est la meilleure chose à faire à mon avis.

    Bon dev!
    -Slimjoe

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    il semble donc évident qu'il faut coder une méthode ReleaseAndNil, sur le modèle du FreeAndNil !
    ou le surcharger avec un TForm en paramètre
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/11/2007, 12h59
  2. isset() toujours vrai avec $_POST
    Par mrttlemonde dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2006, 10h33
  3. Form + input text avec espace
    Par psykbe dans le forum Langage
    Réponses: 3
    Dernier message: 23/02/2006, 14h22
  4. Forms 6i : erreur avec FORMS_DDL
    Par Veve44 dans le forum Oracle
    Réponses: 3
    Dernier message: 22/02/2006, 14h22
  5. [C#] Définir le forme de démarrage avec SharpDevelop
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/10/2004, 10h52

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