2010-01-19 5 views
3

J'utilise un TVirtualStringTree (partie du Virtual TreeView Component) dans mon Delphi project et je voudrais créer une vue où 2 colonnes peuvent avoir des enfants qui sont extensibles/réductibles avec le signe [+]. Dans l'image ci-dessous comme exemple, j'aimerais avoir un signe [+] dans la colonne Serveur mais également dans la colonne Image. L'idée est que l'arbre a plusieurs nœuds serveur qui ont chacun de nombreux fils de processus (quelle colonne principale est l'image) et certains processus ont des sous-processus qui sont des enfants du processus node.Plusieurs nœuds d'expansion dans Virtual TreeView sont-ils possibles?

alt text http://www.remkoweijnen.nl/temp/TreeView.png

est une disposition possible? Si ce n'est pas le composant par défaut, j'apprécierais des conseils sur la façon de l'implémenter chez un descendant.

/Edit: Les captures d'écran suivantes lorsque vous utilisez la méthode TOndrej suggère: alt text http://www.remkoweijnen.nl/temp/TreeView2.png alt text http://www.remkoweijnen.nl/temp/TreeView3.png alt text http://www.remkoweijnen.nl/temp/TreeView4.png

OK, j'ai décidé de mettre en œuvre selon l'idée de TOndrej: alt text http://www.remkoweijnen.nl/temp/TreeView5.png

Répondre

4

Vous le plus don probablement » J'ai besoin de ça. Fais juste une spécification claire du groupement dont tu as besoin. La première colonne peut être polyvalente - montrant des informations différentes sur chaque niveau de regroupement - par ex. niveau 0: serveur, niveau 1: processus, niveau 2 et supérieur: processus enfant. À chaque niveau, seules les colonnes pertinentes à ce niveau doivent afficher des informations. Dans l'exemple ci-dessus, le niveau 0 affiche uniquement le nom du serveur dans la première colonne; le reste des colonnes resterait vide.

Vous pouvez probablement implémenter autant de signes plus que vous le souhaitez en dessin personnalisé, mais ce serait beaucoup de travail et je pense vraiment que le résultat est inutile, inhabituel et facilement confus à l'utilisateur.

+0

J'avais déjà pensé à ça mais ça a l'air un peu bizarre (j'ai ajouté 2 captures d'écran supplémentaires) à la fois quand je répète le nom du serveur et le laisse de côté. – Remko

+3

Remko, ça n'a l'air bizarre que parce que tu n'as pas fait ce que Tondrej a suggéré. * Fusionner * les colonnes "serveur" et "image" en une seule. Pour les objets serveur, le texte de cette colonne contiendra les noms de serveur; pour les processus, il montrera les noms de fichiers. Votre troisième version semble la plus proche; les nœuds du serveur n'utilisent aucune des autres colonnes, de toute façon. –

+0

@TOndrej: OK, j'ai opté pour votre solution, voir la dernière capture d'écran (et avec les bonnes images, il semble beaucoup mieux). +1 @Rob Kennedy: merci pour le commentaire supplémentaire, je suppose que je pensais beaucoup trop difficile. +1: PS: Je dois tester ce que cette approche signifie pour le tri (évident) et la recherche dans l'arbre (j'ai implémenté la recherche automatique en tapant la ou les première (s) lettre (s)) – Remko

3

Une seule colonne peut avoir l'arborescence, les autres colonnes agissent comme une vue de liste. La colonne avec l'arbre est la colonne principale.

Je ne saurais pas comment votre regroupement fonctionnerait si deux colonnes avaient un arbre et qu'elles pourraient "entrer en conflit". Qu'est-ce que le nœud parent, etc etc GUI techniquement ce n'est peut-être pas la meilleure façon de donner ces détails; un utilisateur ne s'attend pas à ce qu'il fonctionne de cette façon.

+0

Étant donné ce que je voudrais montrer, serait un moyen logique pour vous? – Remko

+0

Je pense que vous avez seulement besoin d'une colonne arborescente avec au sommet les noeuds du serveur, et en dessous de ceux-ci les noeuds de processus (et en dessous ceux-ci la récursivité des noeuds de processus pour les sous-processus). Si vous souhaitez afficher les images correctes, vous devez créer des nœuds d'un type spécifié, par exemple un type de serveur, un type de processus, etc. Certaines colonnes ne seront remplies que pour les serveurs, d'autres uniquement pour les processus, etc –

+0

+1, J'ai accepté la réponse de TOndrej comme il était le premier. – Remko

Questions connexes