PDA

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.