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 :

Treeview et r�cursivit�


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par d�faut Treeview et r�cursivit�
    Bonjour, voici mon probl�me.

    D�un c�t� j�ai une ListBox repr�sentant une hi�rarchie de paragraphe tir�e d�un fichier WORD. (Voir fichier en Attachement)
    Je voudrais repr�senter cette arborescence dans un Treeview.
    N��tant pas tr�s copain avec la manipulation de la r�cursivit� (je pense qu�il n�y pas d�autre solution) je demande de l�aide. Peut-�tre pas une r�alisation compl�te mais le chemin � suivre.
    Cordialement
    Images attach�es Images attach�es  

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Bonjour,
    Voici un petit bout de code bricol� il y a quelques ann�es pour un probl�me similaire. Il n'est pas du tout optimis� et livr� "tel quel", mais �a peut �tre un d�but de piste:
    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
      TreeView1->Items->Clear() ;
      for( int i=0; i < ListBox1->Items->Count; i++ )
      {
        AnsiString s = ListBox1->Items->Strings[i] ; //récupération d'un élement
        AnsiString start = ListBox1->Items->Strings[i][1] ; //récupération du préfixe
        bool test = false ;
        for( int j=0; j< TreeView1->Items->Count; j++) //parcourt du treeview
        {
            AnsiString s2 = TreeView1->Items->Item[j]->Text ; //récupération du texte du noeud
            if( start == s2 ) // si le noeud correspond au prefixe, on ajoute un sous-element
                TreeView1->Items->AddChild( TreeView1->Items->Item[j], s ) ;
     
            if( s2 == s ) //si le noeud est déja existant, on sort
            {
                test = true ;
                break ;
            }
        }
        if( !test ) // si le noeud n'existe pas, on l'ajoute à la racine
            TreeView1->Items->Add( TreeView1->Items->GetFirstNode(), s ) ;
      }
    ATTENTION: se code �tait destin� � des listes de chaines tri�es sous la forme:
    1
    1-a
    1-b
    1-c
    2
    2-a
    2-b
    3
    3-a
    3-b
    Le format '-' + lettre ne change rien du tout, pas contre le bout de code ne descend que d'un niveau, pas de deux (ou plus), et ne fonctionnait que pour les pr�fixe 0 � 9.
    De plus, le code fonctionne dans des cas bien pr�cis, et n'effectue aucun test de coh�rence ou autre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par d�faut
    Bonjour sat83,

    Grand merci pour ta r�ponse rapide.
    Effectivement pour deux niveaux pas de probl�me, mais je dois pouvoir aller jusqu�� 9 niveaux. Imbriquer des � for next � n�est pas une solution id�ale. Je continue mes recherches � la solution.
    Je vais essayer de trouver l�algorithme en me basant sur ton exemple mais ce n�est pas gagn�.
    Cordialement.

  4. #4
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Une l�g�re adaptation du code te permet de descendre de autant de niveau que souhait�:
    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
      TreeView1->Items->Clear() ;
      for( int i=0; i < ListBox1->Items->Count; i++ )
      {
        AnsiString s = ListBox1->Items->Strings[i] ;
     
        int tmpIndex = ListBox1->Items->Strings[i].LastDelimiter( "." ); //récupération de la position du dernier '.' 
        AnsiString prefix = ListBox1->Items->Strings[i].SubString(1,tmpIndex-1) ; //recupération du préfixe jusqu'au dernier '.'
        bool test = false ;
        for( int j=0; j< TreeView1->Items->Count; j++)
        {
            AnsiString s2 = TreeView1->Items->Item[j]->Text ;
            if( prefix == s2 )
                TreeView1->Items->AddChild( TreeView1->Items->Item[j], s ) ;
     
            if( s2 == s )
            {
                test = true ;
                break ;
            }
        }
        if( !test )
            TreeView1->Items->Add( TreeView1->Items->GetFirstNode(), s ) ;
      }
    Ce code n'est pas pour autant optimis�, et aucun test n'est fait sur la coh�rence des donn�es

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par d�faut
    IMPECCABLE,

    Exactement ce qu'il me fallait.

    Grand Merci sat83.

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

Discussions similaires

  1. Arborescence par r�cursivit� - treeview
    Par Renaud976 dans le forum VB 6 et ant�rieur
    R�ponses: 1
    Dernier message: 19/11/2011, 05h41
  2. TreeView et R�cursivit�
    Par Maniz dans le forum VB.NET
    R�ponses: 3
    Dernier message: 03/10/2011, 17h03
  3. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    R�ponses: 6
    Dernier message: 06/04/2009, 12h23
  4. o� y a t il un tutorial pour le Treeview ??
    Par silvermoon dans le forum C++Builder
    R�ponses: 4
    Dernier message: 09/12/2002, 13h30
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    R�ponses: 7
    Dernier message: 31/08/2002, 01h44

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