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 :

TTreeNode hide ? [Débutant]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut TTreeNode hide ?
    Bonjour à toutes et à tous,

    Voilà, j'ai une petite question qui me taraude. Y-a-t-il moyen en builder de cacher un noeud d'un TTreeView sans pour autant recharger celui-ci ?
    Par exemple, l'utilisateur ne voit pas certains noeuds en fonctions de certains critères, mais "physiquement" le noeud est présent dans le treeview, mais seulement invisible ou caché ?

    Merci par avance,

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    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 053
    Par défaut
    On mon avis non !
    Pourquoi créer un noeud, utiliser un handle, occuper de la mémoire si l'on sait à l'avance que l'on ne l'affichera pas ?
    Pour un arbre avec peu de niveau et peu de données, le remplissage en une seule passe est envisageable
    Mais pour un explorateur de fichier ou de la BDR où le volume et la profondeur sont grands mieux vaut un chargement au dernier moment pour répartir les temps de chargement
    Idem si c'est lié à de la DB et que chaque niveau correspond à plus ou moins à une Table

    je te conseille d'utiliser des class ou struct dans la propriété Data du TTreeNode
    Ainsi lors du OnExpand d'un Noeud tu as les infos pour construire ses enfants à partir des noeuds du Parent

    Cette class peut tout simplement contenir des ID pour lier la DB si c'est ton cas

    Pense au BeginUpdate\EndUpdate pour améliorer le temps de remplissage (si tu as BCP de noeud à créer d'un seul coup)
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Merci ShaiLeTroll,

    Effectivement, j'ai beaucoup de données et de noeuds à traiter. Pour répondre à ta question, en fait, j'aimerais implémenter un système de filtre après visualisation des données ... pour que l'utilisateur puisse retrouver plus facilement ses données; en fonction de paramètres définies par eux.
    En tout cas, c'est dommage que cela n'existe pas nativement, je dis peut être des bêtise, mais cela ne doit pas être possible en C# non plus ...

    Je regarde tout cela, et à terme, dès que j'ai du temps, j'aimerais bien me faire un p'tit composant perso permettant de faire cela, quitte à supprimer des noeuds au fur et à mesure des critères de filtre, et les stocker "ailleurs" avec toutes les infos nécessaires pour pouvoir remettre ces noeuds au bon endroit en cas de suppression de certains filtres ...

    Encore merci

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    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 053
    Par défaut
    Tu peux aussi changer le ImageIndex, StateIndex, ... en jouant sur des images plus visibles (plus colorées), tu peux attirer l’œil de l'utilisateur sur les éléments appartenants aux filtres

    Sinon, on revient à avoir un arbre en mémoire contenant la structure complète, le filtre consulte cet arbre pour construire les TTreeNode et Data pointe sur des feuilles de l'arbre
    Cet arbre peut aussi contenir une référence à ses TTreeNode pour facilement alterner de l'un à l'autre pour ton algo de construction\déconstruction des noeuds

    J'ai bricolé ceci pour un petit outil permettant de consulter des fichiers ini (mon responsable abuse des ini) et d'en faciliter le déploiemente entre le répertoire des sources "tortoisées" et les répertoires des applications (3 en parallèle dans des répertoires différents)

    le TreeView est rempli selon UN fichier INI, une seule passe
    Puis, j'ai un petit outil de recherche dans les noeuds

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    //---------------------------------------------------------------------------
    void __fastcall TIniFileEditorEditForm::EdSearchChange(TObject *Sender)
    {
      TimerSearch->Enabled = false;
      TimerSearch->Enabled = true;
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TIniFileEditorEditForm::EdSearchKeyPress(TObject *Sender, System::WideChar &Key)
    {
      if (Key == VK_RETURN)
      {
        Key = 0;
        Search(true);
      }
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TIniFileEditorEditForm::TimerSearchTimer(TObject *Sender)
    {
      Search();
    }
     
    //---------------------------------------------------------------------------
    void TIniFileEditorEditForm::Search(bool ForceNext/* = false*/)
    {
      TTreeNode *FoundNode = NULL;
     
      // Le noeud sélectioné contient déjà ce texte !
      if ( ! ForceNext && TreeViewIni->Selected && ContainsText(TreeViewIni->Selected->Text, EdSearch->Text))
        FoundNode = TreeViewIni->Selected;
     
      if ( ! FoundNode)
      {
        // Par de noeud en cours
        TTreeNode *SearchNode = TreeViewIni->Selected ? ForceNext ? TreeViewIni->Selected->GetNext() : TreeViewIni->Selected : TreeViewIni->Items->GetFirstNode();
        while (SearchNode && ! FoundNode)
        {
          if ( ! ContainsText(SearchNode->Text, EdSearch->Text))
            SearchNode = SearchNode->GetNext();
          else
            FoundNode = SearchNode;
        }
     
        // Si pas trouvé, remonte au début
        if ( ! FoundNode && TreeViewIni->Selected)
        {
          TTreeNode *SearchNode = TreeViewIni->Items->GetFirstNode();
          while (SearchNode && ! FoundNode && (SearchNode != TreeViewIni->Selected))
          {
            if ( ! ContainsText(SearchNode->Text, EdSearch->Text))
              SearchNode = SearchNode->GetNext();
            else
              FoundNode = SearchNode;
          }
        }
     
      }
     
      if (FoundNode)
      {
        TreeViewIni->Selected = FoundNode;
        FoundNode->MakeVisible();
      }
     
      TimerSearch->Enabled = false;
    }
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Effectivement, j'utilise la notion de "Data" dans les TTreeNode. Je suis en train de regarder pour ajouter une propriété "Hide" à chaques classes gérant les noeuds, et donc, mettre à vrai/faux en fonction des critères de filtres ... et donc supprimer/ajouter les noeuds en fonction

    A suivre ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Citation Envoyé par Mercusyo Voir le message
    Effectivement, j'utilise la notion de "Data" dans les TTreeNode. Je suis en train de regarder pour ajouter une propriété "Hide" à chaques classes gérant les noeuds, et donc, mettre à vrai/faux en fonction des critères de filtres ... et donc supprimer/ajouter les noeuds en fonction

    A suivre ...
    J'ai donc mis en pratique le post ci-dessus, cela fonctionne bien et acceptable en temps quand j'ai beaucoup de données, mais ce n'est pas forcément le cas ... la plupart du temps, j'ai une liste de données raisonnable et cette technique fonctionne.

    Encore merci,

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    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 053
    Par défaut
    Pour la communauté, peux-tu partager quelques extraits de code ?
    Cela pourrait servir à d'autres membres !
    Merci d'avance
    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

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pour la communauté, peux-tu partager quelques extraits de code ?
    Cela pourrait servir à d'autres membres !
    Merci d'avance
    Tous nos logiciels sont soumis à licence et sont protégés par droit d'auteur, mais, dès que j'ai un peu de temps libre, je vais faire un exemple avec le même nombre de noeuds dans le treeview, avec les classes qui vont avec ... promis

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

Discussions similaires

  1. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 12h33
  2. [TTreeNode] Suppression d'un object du champ data
    Par jmdeffet dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2005, 12h41
  3. [C#] Form : Quelles méthodes ? Close, Dispose, Show, Hide
    Par TheSeb dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/05/2005, 16h42
  4. Couleur du texte d'un TTreeNode dans un TTreeview
    Par Vulcanos dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/02/2005, 18h50
  5. Modifier l'icone d'un TTreeNode sur click
    Par ramseb dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/08/2003, 13h55

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