Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber si un Treeview esta vacio y ... (https://www.clubdelphi.com/foros/showthread.php?t=62401)

JoAnCa 20-12-2008 20:06:31

Como saber si un Treeview esta vacio y ...
 
Hola a todos

Tengo un Treeview que lo lleno en tiempo de ejecucion, y en algun momento necesito saber si este esta vacio
Tambien quisiera saber como ponerle la misma imagen del nodo padre a todos sus nodos hijos

He buscado en el foro, y por cierto hay bastantes temas sobre el treeview, pero no he encontrado lo que necesito.

Siguiendo lo que dice uno de esos hilos (no recuerdo ahora cual), pude ponerle una imagen a los nodo, pero a pesar de ponerle un numero diferente en cada index, me pone la misma imagen para todos los nodos.

Código Delphi [-]
...    
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');   
tvLista.Items.Item[0].ImageIndex:=1;  
...    
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');   
tvLista.Items.Item[0].ImageIndex:=5;   
...

Que estoy haciendo mal?

Que representa el indice de tvLista.Items.Item[0]

.

xEsk 20-12-2008 21:01:08

Código Delphi [-]
if tvLista.Items.Count = 0 then // Si es 0 = vacio

Y lo de las imagenes, estas asignando siempre una imagen al mismo nodo, el primero de la lista, prueba con algo parecido a esto:

Código Delphi [-]
...    
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');   
tnParentNode.ImageIndex:=1;  
...    
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');   
tnParentNode.ImageIndex:=5;   
...

Y haciendo esto, estas creando solo nodos "PADRE", si quieres añadir un hijo a un nodo, debes usar algo parecido a esto:

Código Delphi [-]
var
  tnParentNode: TTreeNode;
  tnChildNode: TTreeNode;

begin
  // creamos un padre
  tnParentNode:=TreeView1.Items.Add(nil,'Titulo 1');
  tnParentNode.ImageIndex:=5;
  // añadimos un hijo al padre creado anteriormente
  tnChildNode:=TreeView1.Items.AddChild(tnParentNode, 'Titulo 2');
  tnChildNode.ImageIndex:=6;

Saludos.

JoAnCa 22-12-2008 23:05:56

Cita:

Y haciendo esto, estas creando solo nodos "PADRE", si quieres añadir un hijo a un nodo, debes usar algo parecido a esto:
Pues yo hago nodos hijos y padres, lo que no puse el codigo completo para ahorrar espacio en el post, como usaba la misma forma para todos...

Haciendo lo que me dices
Cita:

tnParentNode.ImageIndex:=5;
no funciona, pues me dice que ImageIndex no esta declarada

Parece que no se puede poner directamente en la variable, debe ser de otra forma, pero yo no la encuentro

Disculpen mi desconocimiento, pero es que nunca habia trabajado con un treeview

Lepe 23-12-2008 13:00:56

Código Delphi [-]
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');   
tvLista.Items.Item[0].ImageIndex:=1;  
...    
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');   
tvLista.Items.Item[0].ImageIndex:=5;

Igual es un error de copy & paste, pero ahí estás asignando el mismo item[0] distintos imageIndex, por tanto, todos tendrán el mismo.

El truco está en guardar temporalmente el nodo que has añadido, tal y como hace xEsk, aunque yo cambiaría el nombre a la variable para que quedara más claro:
Código Delphi [-]
NewItem:=tvLista.Items.Add(nil,'Titulo 1');   
NewItem.ImageIndex:=1;  
...    
NewItem:=tvLista.Items.Add(nil,'Titulo 2');   
NewItem.ImageIndex:=5;   
...
Como ves, primero se añade un elemento nuevo y se guarda la referencia en NewItem y ahora, se le cambia el imageIndex a ese NewItem. Ahí está la diferencia entre tu código y el de xEsk

Ese error que te da de "imageIndex no declarado" es extraño, lo estoy mirando y en delphi 7 si me aparece la propiedad imageIndex para un TTreeNode :confused:

Saludos

JoAnCa 23-12-2008 20:44:40

Tienes razon Lepe, el problema es que estaba tratando de asignarle ImageIndex al control TreeView (no me percate), en lugar de a la variable como me explicaron uds.
Ya todo me sale bien, Muchas gracias :D


La franja horaria es GMT +2. Ahora son las 10:57:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi