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 :

prb avec un treeview et data


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Par défaut prb avec un treeview et data
    Bonsoir,

    J'ai depuis un problème avec un treeview et la récupèration de l'objet attaché à un noeud.


    Dans ma classe ClTreeView j'ai une méthode qui ajoute des noeuds à partir d'une liste d'objet :
    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
     
    ...
     TTreeNode *tn=NULL;
     TTreeNode *tnFils=NULL;
     TClDisque *disk=NULL;
     // tv = ma treeview passé en paramètre à ma class,
     // tn = le noeud pere
    ...
     disk = ldisques->Fct_DisqueGetFirst();
     while(disk!=NULL) {
      tnFils = tv->Items->AddChild(tn, disk->volume);
      tnFils->Data = disk;
      tnFils->ImageIndex = disk->iconeIndex; 
      Fct_Tree_NodeDummyAdd(tnFils);
      disk = ldisques->Fct_DisqueGetNext();
     }

    et dans l'événement OnExpanding de ma treeview, je veux récupèrer l'objet attaché au noeud, en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::ObjTv_GaucheExpanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion)
    {
     TClDisque *disk=NULL;
     disk = (TClDisque *) Node->Data;
     ...
    }
    et la "disk" ne correspond pas à celui que j'ai attaché plus haut. Pourtant je suis sur le meme noeud, et je ne vois rien qui cloche

    merci du coup de main


    Cordialement,

    mickaël

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Eh bien tu travailles avec des pointeurs.

    Cela dépend alors du résultat de ta fonction Fct_DisqueGetFirst(), elle retourne un pointeur vers une structure/classe de type TClDisque.
    Si à chaque appel elle alloue la mémoire de la façon suivante ton code devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Exemple de Fct_DisqueGetFirst
    TClDisque *Fct_DisqueGetFirst ( void )
    {
        TClDisque *res = new TClDisque;
        // Là tu modifie ton résultat
     
        return res;
    }
    Je pense que le pb c'est que ta fonction Fct_DisqueGetFirst retourne un pointeur mais toujours sur la même adresse...cela serait confirmé si à chaque fois que tu testes tu tombes sur les mêmes données.

    Si je me suis trompé désolé

  3. #3
    Membre confirmé
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Par défaut
    bonjour,

    En fait j'utilise aussi ma class TClDisques et TClDisque pour remplir un listview et je n'ai pas de problème.

    Fct_DisqueGetFirst retourne en effet un objet TClDisque qui est le premier d'une liste.
    ensuite j'ai une boucle et je fais un Fct_DisqueGetNext pour récupère les élements suivants de ma liste.

    Pour tester, je ne mets qu'un élément dans la treeview, le premier élément de ma liste qui est "c:\"

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    // dans la méthode de ma class treeview :
    void __fastcall TClTreeView::Fct_Tree_DisqueLoad()
    {
     TClDisque *disk=NULL; 
     TTreeNode *tnFils=NULL;
     
     tnFils = tv->Items->AddChild(tn, disk->volume); 
     tnFils->Data = disk; 
     disk = NULL;
     disk = (TClDisque *) tnFils->Data;
     Fct_Alert(disk->volume); // la j'obtiens par exemple c:\
    }
     
     
    // et la je suis dans mon formulaire
    void __fastcall TForm1::ObjTv_GaucheExpanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion) 
    { 
     TClDisque *disk=NULL; 
     // la j'obtiens bien c:\, donc je suis sur le bon noeud
     Fct_Alert(Node->Text);
     
     disk = (TClDisque *) Node->Data; 
     Fct_Alert(disk->volume); // erreur,  
    }

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Tu peux me montrer le code de ta fonction Fct_DisqueFirst ou au moins les lignes qui crée la variable qui va contenir le résultat ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Par défaut
    hello,

    sorry ma connexion internet m'a jouée pas mal de mauvais tours

    voilà le code la fonction Fct_DisqueGetFirst. Elle est toute simple en fait, et elle est utilisée dans le remplissage d'une listview.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TClDisque * __fastcall TClDisques::Fct_DisqueGetFirst()
    {
      this->elementEnCours = 0;
      if(Fct_DisqueCount()>this->elementEnCours) {
         return (TClDisque *)ldisk->Items[this->elementEnCours];
      }
      else return NULL;
    }

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut Re: prb avec un treeview et data
    Citation Envoyé par mikyfpc
    et la "disk" ne correspond pas à celui que j'ai attaché plus haut. Pourtant je suis sur le meme noeud, et je ne vois rien qui cloche
    Peut tu me préciser les choses suivante ?

    - quel est le "disk" qui va avec ton noeud ? celui d'un autre noeud ? lequel ?

    - modifie tu ta liste des disk ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Mickaël
    Inscrit en
    Mai 2003
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Mickaël
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2003
    Messages : 106
    Par défaut
    hello,

    j'ai repris une bonne partie du code de la classe et je n'ai plus le problème.

    je te remercie de ton aide, tes 2 dernières questions m'ont aidé à voir ce qui pouvait poser problème

    merci neilos

    mickaël

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    De rien

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

Discussions similaires

  1. prb avec une requete
    Par gregal dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2005, 11h59
  2. [Débutant] Jframe/JInternalFrame: prb avec JScrollPane
    Par flzox dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/12/2004, 00h08
  3. Problème avec Virtual Treeview
    Par bisounoursbleu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/12/2004, 15h37
  4. prb avec dbimage
    Par hrezzaz dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/10/2004, 14h41
  5. [TOMCAT] prb avec le cache de certains users
    Par osmoze dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/06/2004, 15h21

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