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 :

Comment détruire un élément dynamique


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut Comment détruire un élément dynamique
    Bonjour a tous,



    J'ai un petit soucis dans mon application ....comme tout le temps ....lorsqu'on créé un element ou autre il faut biensur le détruir ...j'ai su le créer avec votre aide mais je n'arrive pas a les détruir....


    j'ai donc sur mon application un PageControl avec la premiere tabsheet qui est static . puis je crée dynamiquement d'autres tabsheet avec pour chaques tabsheet une stringgrid associée a la tabsheet ...j'ai donc deux élément créés que je n'arrive pas a détruir...


    pour info je créée les élément de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         tbs := TTabSheet.Create(self);
         tbs.PageControl := Classeur1;
         tbs.Caption := 'Classeur n°' + intToStr(Classeur1.PageCount);
     
         Activegrid := Tstringgrid.Create(self);

    merci des réponses qui seront apportées

    © Seb ®

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour

    Vous avez défini un control.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
      MyControl: TControl;
    Vous l'avez créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      My control := TControl.create(...);
     Mycontrol.Parent := ...
    etc.
    Pour le détruire vous pouvez utiliser free ou freeand nil
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Freeandnil(Mycontrol);
    Groso modo Freeandnil fonctionne de la manière suivante
    if (Object a detrruire) <> nil then begin
    (Object a detruire).free;
    (Objecte a detruire) = nil;
    end;

    C'est pratique, car plusieurs freeandnil(MyObject) ne produite pas de bug et il est possible de tester si MyObject est gréer (<> nil)

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    les composants ayant été créés avec un Owner seront automatiquement détruits avec celui ci.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Points : 45
    Points
    45
    Par défaut
    yes merci les mec mais j'ai trouvé en lisant vos réponses ca m'a fait pensé que je créé des élément dynamique attachés a un page control qui étais statique ...du cou j'ai tout passé en dynamique et c'est beaucoup mieux ...ca me donne ceci


    pour la création :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         classeur1 := TPageControl.Create(self);
         Classeur1.Parent := Tableur;
         Classeur1.Align := alBottom;
         classeur1.align :=  Altop;
         Classeur1.Anchors := [akLeft,akBottom];
         classeur1.Height := 411;
         tbs := TTabSheet.Create(self);
         tbs.PageControl :=   classeur1;
     
         tbs.Caption := 'Classeur n°' + intToStr(Classeur1.PageCount);
         Activegrid := Tstringgrid.Create(self);

    et après je libère par étape


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TTableur.BtnFermerClick(Sender: TObject);
     
    begin
       try
         FreeAndNil(activegrid);
         FreeAndNil(tbs);
         FreeAndNil(classeur1);
         Except on E:exception do
         end;
      close;
    end;

    merci pour les réponses ca m'a bien aidé a mieux chercher le pk du comment !!

    © Seb ®

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    c'est bien ce que je disais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TTableur.BtnFermerClick(Sender: TObject);
     
    begin
       try
         FreeAndNil(activegrid); // sera fait par le free suivant
         FreeAndNil(tbs); // sera fait par le free suivant
         FreeAndNil(classeur1); // sera fait lors de la libération du Tableur
         Except on E:exception do
         end;
      close; // tout est libéré si Action = caFree...
    end;

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

Discussions similaires

  1. Comment changer un élément de menu dynamiquement
    Par iviewclear dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 26/12/2010, 16h59
  2. Détruire un élément en Jscript, créé dynamiquement en asp.net
    Par mappy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/10/2006, 09h04
  3. Réponses: 3
    Dernier message: 08/01/2005, 10h01
  4. Réponses: 6
    Dernier message: 20/10/2004, 11h42
  5. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50

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