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

C++Builder Discussion :

probl�me de destruction de composants dynamique


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut probl�me de destruction de composants dynamique
    Bonjour,

    Je fabrique des composants suivant le principe suivant :
    J'ai un TList qui stocke d'autre Tlist qui eux pointent vers les composants que je cr�e (un TList contient tous les composants d'un nouvel onglet d'un pagecontrol).

    Voici un bout du code :
    Dans le .h :
    Dans le cpp :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TList *ListeComp = new TList();
    TTabSheet *pTabSheet = new TTabSheet(PageControl1);
    pTabSheet->PageControl = PageControl1; //je ne sais pas si cette ligne est utile
    ListeComp->Add(pTabSheet);
    TScrollBox *TempScrollBox3 = new TScrollBox(pTabSheet);
    ListeComp->Add(TempScrollBox3);
     
    PageList->Add(ListeComp);
    PageControl1->ActivePage = pTabSheet;
    Jusque la pas de probl�me mais pour supprimer les composants dans le FormClose :
    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
    TList *TempList;
    for (int A = 0; A < PageList->Count; A++)
        {
        TempList = (TList *)PageList->Items[A];
        for (int I = 0; I < TempList->Count; I++)
            {
            delete TempList->Items[I];
            }
        }
    TempList = NULL;
    for (int I = 0; I < PageList->Count; I++)
        {
        delete (TList *)PageList->Items[I];
        }
    delete PageList;
    Toutes ces lignes passent correctement mais le programme plante jusqte apr�s. J'ai essay� de mettre un bouton qui supprime mes composants avec ce bout de code, mais les composants ne disparaissent pas et le programme plante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TList *TempList;
    for (int A = 0; A < PageList->Count; A++)
        {
        TempList = (TList *)PageList->Items[A];
        for (int I = 0; I < TempList->Count; I++)
            {
            delete TempList->Items[I];
            }
        }
    TempList = NULL;
    Je ne comprend plus. Comment faire pour garder les pointeur et d�truire les composants point� par ceux-ci sachant que je ne connait pas par avance le nombre de composants ni leur type, ni leur nom?

    Merci

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    bonjour, dans ta TList tu essaye de stocker des objects de types diff�rents
    ce n'est pas posssible
    par ailleur ton code de destruction n'est pas correct
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    ListeComp->Add(pTabSheet); 
    ListeComp->Add(TempScrollBox3);
    utilise plut�t la classe TObjectList,
    elle est pr�cue pour stocker des objects de la VCL de types diff�rents
    pour la lib�ration de la liste il suffit simplement de d�truire la liste ce qui va automatiquement lib�rer tous les ptr stock�s ainsi que la m�moire associ�e

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  3. #3
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    J'ai trouv�!
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    TComponentList *ListeComp = new TComponentList();
    TTabSheet *pTabSheet = new TTabSheet(PageControl1);
    pTabSheet->PageControl = PageControl1;
    ListeComp->Add(pTabSheet);
    TScrollBox *TempScrollBox3 = new TScrollBox(pTabSheet);
    ListeComp->Add(TempScrollBox3);
    PageList->Add(ListeComp);
    et :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    while (0 < PageList->Count)
          {
          delete (TComponentList *)PageList->Items[0];
          PageList->Delete(0);
          PageList->Capacity = PageList->Count;
          }
    delete PageList;
    J'utilise un TComponentList qui d�truit les composants vers lesquel il pointe lors de sa destruction. Par compte, si l'on fait pareil avec le TList, il d�truit le pointeur (on a plus de trace pour retrouver le pointeur) mais il ne d�truit pas les composants. Le TComponentList correspond parfaitement � ce qu'il me faut � savoir une liste servant � g�rer des composants.

    Merci pour ton coup de main Si tu ne m'avait pas parl� de TObjectList, je n'aurait jamais trouv� ce TComponentList.

  4. #4
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Citation Envoy� par DjmSoftware
    bonjour, dans ta TList tu essaye de stocker des objects de types diff�rents
    ce n'est pas posssible
    C'est tout � fait possible, et n'entrave en rien le fonctionnement du programme. Bien entendu, si on a besoin de conna�tre le type de l'objet apr�s coup, et qu'ils ne sont pas stock�s dans la TList d'une mani�re qui permette de le faire, cela n'est vraiment pas conseill�. Dans les autres cas, il n'y a aucun probl�me.

  5. #5
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    bonjour,

    Greybird a �crit:
    C'est tout � fait possible, et n'entrave en rien le fonctionnement du programme. Bien entendu, si on a besoin de conna�tre le type de l'objet apr�s coup, et qu'ils ne sont pas stock�s dans la TList d'une mani�re qui permette de le faire, cela n'est vraiment pas conseill�. Dans les autres cas, il n'y a aucun probl�me.
    La classe TList a �t� concue pour stocker des pointeurs de type <void>
    il est naturellement possible de stocker d'autre types de ptr en les <castant>


    le probl�me se situe lors de la destruction de la liste car il n'est plus possible de connaitre le type de ptr stock�s raison pour laquelle j'ai post� que ce n'�tait pas possible

    le r�sultat sera la cr�ation de memory leak

    la VCL poss�de d'autre types de classes de List par exemple TComponentList,TObjectList permettant de stocker des ptr de types diff�rents mais ayant comme classe de base respectivement TComponent et TObject

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me de destruction dynamique d'Applet
    Par EvAyla dans le forum Applets
    R�ponses: 1
    Dernier message: 13/06/2007, 21h48
  2. Probl�me de gestion de composant dynamique
    Par 6BORG dans le forum Composants VCL
    R�ponses: 4
    Dernier message: 18/08/2006, 17h40
  3. [FLASH MX] Nom de composant dynamique
    Par bobgeldof7 dans le forum Flash
    R�ponses: 2
    Dernier message: 12/11/2004, 23h07
  4. [THandle][DLL] Composant dynamique et THandle
    Par el_diablos dans le forum Langage
    R�ponses: 10
    Dernier message: 01/07/2004, 15h01
  5. [JTabbedPane] Acc�s � des composants dynamiques
    Par SamRay1024 dans le forum Composants
    R�ponses: 8
    Dernier message: 26/05/2004, 13h04

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