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

Composants VCL Delphi Discussion :

TreeView : comment développer selon un niveau choisi


Sujet :

Composants VCL Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut TreeView : comment développer selon un niveau choisi
    Salut tout le monde !
    Mon TreeView quand il est développé en totalité n'est pas très "mignon" puisqu'il a trop d'éléments. Il est constitué de 4 niveau, je voudrais pouvoir développer le TreeView à la demande, si l'utilisateur clic sur le niveau 1 alors tout se referme et je n'aurais que les éléments du niveau 1. Idem si je clique sur le niveau 2. Pour bien comprendre je schématise :

    Zone Niveau 0
    Unité Niveau 1
    Centre Niveau 2
    Communes Niveau 3
    STEP Niveau 2
    SR Niveau 2

    Exemple :

    Zone Niveau 0
    Unité Chlef Niveau 1

    Centre Chlef Niveau 2
    Commune Chlef Niveau 3
    Commune Oum Drou Niveau 3
    Centre Ténès Niveau 2

    STEP Chlef Niveau 2
    STEP Chettia Niveau 2
    SR 1 Houria Niveau 2
    SR 2 Houria Niveau 2

    Pour cela j'ai utilisé ce bout de code mais qui apparemment ne fonctionne pas bien :
    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
    procedure CollapseNodesAtLevel(var ATV: TTreeView; NIV : integer);
    var
      ANode, CNode: TTreeNode;
    begin
      ATV.FullCollapse;
      ANode := ATV.Items.GetFirstNode;
      while (ANode <> nil) do
      begin
        CNode := ANode.getFirstChild;
        while (CNode <> nil) do
        begin
          if (ANode.Level = NIV) then CNode.Collapse(True)
          else CNode.Expand(True);
          CNode := CNode.GetNextSibling;
        end;
        ANode := ANode.GetNextSibling;
      end;
    end;
    Donc je commence par Replier tout puis, je dois vérifier que je suis le bon niveau afin de ne développer que le niveau en question.
    Si vous avez un autre code je suis preneur

    Merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Membre régulier
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2003
    Messages : 99
    Points : 108
    Points
    108
    Par défaut
    J'ai du mal a saisir ce que tu cherche a faire. Je répondrais en fonction de ce que j'ai compris.

    Si vraimùent tu ne veux pas continuer a explorer ton idée tu peux toujours faire une fonction récursive qui s'execute a partir du root a chaque changement de noeud, qui reconnait le nœud courrant et en déduit le niveau à ouvrir et fermer tout le reste ?. ( ca serait bien aussi de bloquer le rafraichissement du TTree le temps du traitement ^^)

    mais bof...

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
    begin
      TreeView1.FullCollapse;
    end;

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Oki
    je vois que je me suis très mal exprimé
    ma question est : comment peut-on développé tout les nœuds d'un même niveau par simple clique sur un bouton qu'on met sur notre fiche ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Vcl.ComCtrls.TCustomTreeView.FullExpand permet de tout ouvrir !

    Pense que pour ouvrir le Level 2, il est nécessaire que le Level 1 et Level 0 soit aussi ouvert !

    Si NIV est le niveau A OUVRIR

    je n'ai pas testé mais regarde cette variante simplifié
    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
     
    procedure CollapseNodesAtLevel(var ATV: TTreeView; NIV : integer);
    var
      ANode: TTreeNode;
    begin
      ATV.FullCollapse;
      ANode := ATV.Items.GetFirstNode;
      while (ANode <> nil) do
      begin
        if (ANode.Level <= NIV) then 
          ANode.Expand(False)
       else
         ANode.Collapse(False);
     
       ANode := ANode.GetNext();
      end;
    end;


    Et comme tu fais déjà le boulot, il ne faut pas faire de récursif d'où les False !

    En plus, attention, selon comment on boucle,
    on a accès à tous les noeud d'un coup sans différencier le niveau
    Soit juste le nœud d'un parent



    Ensuite ne confond pas Level et Enfant,
    Des nœuds enfant de plusieurs parents peuvent avoir le même Level !
    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

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Merci ShaiLeTroll votre petite modification avec les explications m'ont été d'un grand secours.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/05/2011, 19h36
  2. Comment Développer en équipe ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 45
    Dernier message: 19/11/2007, 00h15
  3. comment trier les instances d'une classe selon un attribut choisi
    Par rddev dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/05/2007, 00h01
  4. [CF][VB.Net] Comment développer pour Pocket PC ?
    Par imedd_r dans le forum Windows Mobile
    Réponses: 9
    Dernier message: 06/05/2005, 20h49
  5. Comment développer un projet à plusieurs ?
    Par Clandestino dans le forum Outils
    Réponses: 7
    Dernier message: 07/01/2005, 08h29

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