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 :

Détruire un TFrame aprés utilisation.


Sujet :

Delphi

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Par défaut Détruire un TFrame aprés utilisation.
    Bonjours,
    Je me suis crée un TFrame dont sur cette Frame j'ai des boutons, cases à cochés
    des variables ansi que des Array...Ma question est si je pousse par exemple
    un bouton du nom Close, la Frame ainsi que tous les variables et objets mise
    sur cette frame sois libérer, des allouer ou détruit pour libérer de la mémoire.
    Voici comment je crée ma Frame.
    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
     
    type
      TFrameBt2edit = class(TFrame)
    ..
    ..
     var
      ToFrame2: TFrameBt2edit;
    ..
     
     implementation
     
     
    Procedure  Init_Panel2;
    begin 
     ToFrame2 := TFrameBt2edit.Create(ToFrame2);
     ..
    Est-ce suffisant de faire ceci...(qui fonctionne à moitié)
    En faisant un test après d'avoir poussé le bouton close je constate que le contenu du array existe encore! (ou dois-je les dés allouer séparément)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFrameBt2edit.CloseClick(Sender: TObject);
    begin
     RemoveControl(ToFrame2);
     ToFrame2.Free ;
    end;
    Merci pour vôtre aide, salutations

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Pas très clair...
    Si tu crées 'en code' des composants tu dois les détruire 'en code'.
    Si tu crées un composant qui en contient d'autres tu dois détruire ces autres avant de détruire ton composant 'container'.

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 101
    Par défaut
    tu dois ajouter un destructor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      TFrameBt2edit = class(TFrame)
    public
      destructor destroy(); override;
    ...
    Normalement, un array est libéré si il est alloué dans l'objet (il effectue un finalize sur ses membres ... public ou privé ou publié chacun se comporte différement, les uns sont à la charge du dev, les autres au gestionnaire de flux ...,

    bon ensuite comme le pointeur de ton tableau n'est pas nulle, la mémoire, elle n'est pas effacée tout simplement ... donc delphi peu lire, mais ton programme lui ne peut pas ... c'est spécial le deboggage, il s'accorde des droits sur l'exe lancé ... (voir API IsDebuggerPresent ...)

    ensuite ceci me choque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure  Init_Panel2;
    begin 
     ToFrame2 := TFrameBt2edit.Create(ToFrame2);
     ..
    Comment ToFrame2 qui n'est pas instancié peut-être son propre Owner ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure  Init_Panel2;
    begin 
     ToFrame2 := TFrameBt2edit.Create(nil); // ou application à la limite
     ..
    idem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFrameBt2edit.CloseClick(Sender: TObject);
    begin
     RemoveControl(ToFrame2);
     ToFrame2.Free ;
    end;
    Pourquoi ToFrame2 devrait se supprimer des ses controls (ce n'est pas la gestion mémoire, contrairement à RemoveComponents) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFrameBt2edit.CloseClick(Sender: TObject);
    begin
     Self.Release(); 
    end;
    ...
    Aide via F1 - 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é !

    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

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Par défaut
    Tu as raison, ce n'est pas correct je viens de corriger pour faire cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Procedure  Init_Panel2; 
    begin 
     ToFrame2 := TFrameBt2edit.Create(Form1);
     ..
    L'idée était de détruire tout les composants et les codes.. en une seul fois qui étaient placer sur la Frame ' ToFrame2 ' en cliquant sur le bouton 'close'

    Le bouton close biensure je la mets sur une autre form.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 321
    Par défaut
    Ainsi, si j'ai bien compris je ne peux pas détruire tout les composants placé
    sur un frame en une seule fois, 'en détruisant seulement le frame'.
    (Je dis ceci car j'avais cru que en détruisant un frame avec tout dessus,
    les composants étaient détruits automatiquement aussi)?

    Donc je dois les détruires un par un à partir de la dernière création à la
    première création!

    Merci pour l'info et salutations.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 101
    Par défaut
    Les composants posés via IDE Delphi, seront libérés, via le mécanisme de Owner ...

    les objets/pointeurs que tu créé toi même via des create, des new, ... tu as la charge de libération si tu n'as pas précisé le Owner pour le Components
    Aide via F1 - 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é !

    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

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

Discussions similaires

  1. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  2. bug du programme apres utilisation de dialog
    Par avogadro dans le forum Delphi
    Réponses: 13
    Dernier message: 07/06/2006, 15h33
  3. Réponses: 4
    Dernier message: 18/02/2006, 15h26
  4. "Access violation" apres utilisation des compos BD
    Par bahaa dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/10/2005, 07h59
  5. [FB] installation et apres? utilisation ???
    Par vad dans le forum Débuter
    Réponses: 7
    Dernier message: 17/02/2005, 09h55

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