Ver la Versión Completa : Cómo asignar imagenes a un TTreeView
David
11-06-2007, 19:07:39
Hola
Tengo un Ttreeview cuyos nodos voy rellenando de una base de datos, con categorias y al final en nombre del informe .
La idea es seleccionar un informe para imprimir.
El arbol puede contener varias directorios , tal y así :
raiz -Carpeta1-CarpetaA - Informe100
-Informe101
-Carpeta2 - informe102
etc...
Así pues en el ejemplo que he puesto , en Carpeta1 y Carpeta2 y CarpetaA (que esta contenida en Carpeta1) , iría una imagen del Timagelist , por ejemplo la 0 , y donde pone informeXXX iria pues otra imagen , por ejemplo la 1.
Quiero que al crearse el arbol , pues salga cada nodo del TTreeView con su imagen correspondiente.
Un saludo
maeyanes
11-06-2007, 19:12:46
Me imagino que estás preguntando como asignar estas imagenes en tiempo de ejecución mientras llenas el TreeView?
Si es así, solo tienes que asignar la propiedad ImageIndex y SelectedIndex del TTreeNode:
var
Node: TTreeNode;
begin
Node := TreeView1.Items.AddChild(nil, 'Carpeta 1');
Node.ImageIndex := 0;
Node.SelectedIndex := 0
end;
Saludos...
David
11-06-2007, 21:09:47
De esa manera , hay un problema .
Mi código es más o menos así :
procedure TForm.Oncreate;
var
nodo : array of TTreenode;
SetLength(nodo,X);
//Valor raiz
nodo[0] := TreeView1.Items.add(nil,'Informes');
nodo[0].ImageIndex := 2;// valor en el TImageList
nodo[0].SelectedIndex := 2;
//Valores que tendrán el dibujo de carpetas
while not TablaCarpetas.eof do
begin
nodo[ivalordelabasededatos] := TTreeView1.items.AddChild(padre,'Texto');
nodo[ivalordelabasededatos].ImageIndex := 0;
nodo[ivalordelabasededatos].SelectedIndex := 0;
end;
// valores que tendrá el dibujo de informe
while not TablaInformes.eof do
begin
nodo[ivalordelabasededatos] := TTreeView1.items.AddChild(padre,'Texto');
nodo[ivalordelabasededatos].ImageIndex := 1;
nodo[ivalordelabasededatos].SelectedIndex := 1;
end;
Bien , si hago esto , el primer valor , el raiz , NO toma la imagen , y luego los demás si los lleva bien , PERO , cuando selecciono un nodo de los que contiene la propiedad ImageIndex = 1 , se me cambia la imagen al que tiene el ImageIndex := 0.
Este es el problema. Que si me los rellena , pero al seleccionar pues los de dibujo informe ,cambia el icono.
maeyanes
11-06-2007, 21:41:00
Tu problema está en que estás usando Nodo[index]...
Has solo:
Nodo := Treview1.Items.Add(nil, 'Informes');
Nodo.ImageIndex := 0;
Nodo.SelectedIndex := 0;
Esto es, si usas la forma Nodo[0] en realidad estás haciendo Nodo.Item[0].ImageIndex := 0; lo que establece el valor de la propiedad del primer nodo hijo de Nodo...
Graficamente sería así:
- Nodo
|- Nodo[0] <--- aqui estas haciendo ImageIndex en realidad...
|- Nodo[1]
Saludos...
David
11-06-2007, 22:17:09
Esto es increible , el mismo código que he puesto arriba lo he probado en otro ordenador y sale bien .
Ahora si que no entiendo nada .
De todas maneras , por si mañana no me sale , hay algo que no puedo hacer y es no poner el nodo sin un array , es decir tengo que poner nodo[X] , por que es la única manera de de rellenar los datos de la base de datos.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.