Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo asignar imagenes a un TTreeView (https://www.clubdelphi.com/foros/showthread.php?t=44627)

David 11-06-2007 19:07:39

Cómo asignar imagenes a un TTreeView
 
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:

Código Delphi [-]
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í :

Código Delphi [-]
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:

Código Delphi [-]
  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í:

Código:

- 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.


La franja horaria es GMT +2. Ahora son las 08:27:32.

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