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

Lazarus Pascal Discussion :

TShellTreeView et AddChild, comment générer une arborescence ? [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 148
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 148
    Par défaut TShellTreeView et AddChild, comment générer une arborescence ?
    Bonjour,

    l'idée c'est de refaire ça (qui remonte à 20 ans en arrière avec un w2000, un Delphi7 et le composant DirectoryListBox (fourni avec D7 bien que remontant à Win 3.1) et qui fait ce que je veux, savoir, une jolie arborescence :
    Nom : children-loadfont.png
Affichages : 188
Taille : 3,4 Ko

    Mais comme avec le TShellTreeView, je m'y perds (c'est effroyable la quantité d'informations proposée), alors déjà j'ai commencé par voir si j'arrivais à quelque chose avec un simple TreeView (souvenir de tout un tas d'essais sous Windows et D7 il y a une quinzaine d'années) et ma foi, avec juste cette poignée de lignes de code, ça fait exactement ce qu"il me faut (TODO: rajouter les images, pour avoir un peu de charme) :
    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
    procedure TForm1.Button3Click(Sender: TObject);
    const
      // simulation arborescence
      s = 'f:\4_2k\w2k\programmation\projets finis\loadfont\delphi\fonts\'; // 62
      DirSep = '\';
    var
      t: string;
      i: integer;
      NodeText: string;
    begin
      t := '';
      for i := 1 to length(s) do begin // récup des noms des dossiers de l'arbo
        NodeText := '';
        t := t + copy(s[i], 1);
        if s[i] = DirSep then begin
          NodeText := ExcludeTrailingPathDelimiter(t);// suppr du \ de fin
          //ShowMessage(NodeText); // ok, 'f:' et les autres, un par un
          aNode := TreeView1.Items.AddChild(aNode, NodeText); // du projet TreeView/tv_learning
          aNode.GetLastChild; // 2 lignes pour avoir l'arbo ouverte
          aNode.ExpandParents;
          t := '';
        end;       
      end;
    end;
    // sans oublier
        ...
      private
        { private declarations }
        aNode: TTreeNode;
    Ce bout de code (enfin, juste les 3 lignes centrales qui commencent par aNode) vient de là mais dommage, le lien est mort...
    Et il donne ça, c'est exactement ce que je veux. EDIT : c'est mieux avec des images, hein :
    Nom : arbo-escalier.png
Affichages : 170
Taille : 9,6 Ko Nom : avec_images.png
Affichages : 169
Taille : 9,2 Ko
    (suffit d'avoir une ImageList et de rajouter 2 lignes sous les 3 commençant par aNode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aNode.ImageIndex    := 1; // Image du noeud
    aNode.SelectedIndex := 0; // Image du noeud sélectionné
    )
    Mais comme je voudrais l'avoir avec un TShellTreeView dont il parait que c'est un dérivé du TTreeView, alors, n'écoutant que mon courage et n'ayant peur de rien, je prends la ligne active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aNode := TreeView1.Items.AddChild(aNode, NodeText);
    et je la remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aNode := stv.Items.AddChild(aNode, NodeText); // 'stv' = ShellTreeView
    Je compile, sans erreur, F9 et... hang ! Programme bloqué,
    Je reprends la main, je recommence en pas à pas et je constate tristement que la ligne ci-dessus bloque tout au troisième passage, sans message, sans rien, juste tout bloqué...

    Pour essayer d'y voir clair, j'ai tenté 2 essais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //for i := 1 to length(s) do begin // original - ça bloque
    //for i := 1 to 12 {length(s)} do begin // 3 premières entrées de la liste - ça bloque
      for i := 1 to 8  {length(s)} do begin // 2 premières entrées, ça passe
    mais pas moyen d'ouvrir-fermer l'arbo, la construction en escalier ne s'est pas faite :
    Nom : stv_kc.png
Affichages : 167
Taille : 10,1 Ko

    En plus, la première entrée (le / sélectionné) n'est pas de moi.

    Si quelqu'un a une idée, ça serait merveilleux.
    Merci,

    PS : et cette cochonnerie de ggl qui me fait perdre un temps dément à éliminer la quantité de pages qu'il me remonte SANS les mots-clé que je demande, ça, ça me laisse sans voix...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Citation Envoyé par Jipété Voir le message
    mais pas moyen d'ouvrir-fermer l'arbo, la construction en escalier ne s'est pas faite
    Le but de TShellTreeView est de représenter l'arborescence des répertoires et cette représentation est construite à la volée à l'ouverture d'un nœud, ce que tu pourrais y ajouter sera systématiquement supprimé.

    Pourquoi passer par ce composant plutôt que TTreeView ?

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 148
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 148
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Pourquoi passer par ce composant plutôt que TTreeView ?
    Parce que je me souvenais qu'il faut tout faire à la mano, et que je commence à devenir un peu flemmard,

    Citation Envoyé par Andnotor Voir le message
    Le but de TShellTreeView est de représenter l'arborescence des répertoires et cette représentation est construite à la volée à l'ouverture d'un nœud, ce que tu pourrais y ajouter sera systématiquement supprimé.
    Oui, je m'en suis un peu rendu compte, donc je vais suivre la voie du gourou treeview, au moins j'arrive facilement à de bons résultats !

    Merci et bonne journée,

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/07/2006, 12h05
  2. [VS.NET]Comment générer une dll de page ?
    Par fnganiet dans le forum Visual Studio
    Réponses: 4
    Dernier message: 19/05/2006, 14h28
  3. [HTML] Comment faire une arborescence en html
    Par jehlg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/02/2006, 23h55
  4. Comment générer une image dynamiquement ?
    Par K20 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2005, 01h27
  5. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 21h29

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