PDA

Ver la Versión Completa : Problema con imagenes de Treeview


yomismo24
12-05-2008, 13:26:00
Hola
mi problema es el siguiente: estoy usando un treeview que carga un imagen a lado de cada nodo desde un Imagelist. Hasta ahí todo bien, el problema es que cuando selecciono un nodo se me cambia la imagen por la primera del Imagelist. Cuando deja de estar seleccionado vuelve a su imagen original.
¿Como puedo evitar que se cambie la imagen al seleccionar?
Saludos y muchas gracias

xEsk
12-05-2008, 14:28:38
Es que también está la propiedad: SelectedIndex. Esta propiedad assigna una imagen distinta a los nodos seleccionados (y por defecto, su valor es 0). Así pues debes asignarle también un valor a esta propiedad, si no quieres que cambie, en tu caso tienes que poner el mismo valor que en ImageIndex.

Saludos.

yomismo24
13-05-2008, 10:01:06
Hola
gracias por la respuesta. Si, se que esa propiedad existe y que por defecto su valor es 0. Mi problema es como hacer para cambiar el valor SelectedIndex durante la ejecución para ponerle el valor del ItemIndex del nodo pulsado, ya que nada más pulsarlo se pone autmaticamente ItemIndex:=SelectedIndex y no al revés que es lo que a mi me interesa. No se si me explico.
A ver si se os ocurre algo.
Gracias y un saludo!

xEsk
13-05-2008, 17:30:10
A ver, si rellenas tú el TreeView con Items creados por ti, es tan fácil como asignarle el valor SelectedIndex el mismo que ImageIndex:

Ejemplo:procedure TForm1.Button1Click(Sender: TObject);
begin
with TreeView1.Items.Add(nil, 'Prueba') do
begin
ImageIndex:=15; // Valor 15, por ejemplo
SelectedIndex:=ImageIndex; // Copiamos el valor de ImageIndex
end;
end;

Pongamos por ejemplo, que el TreeView no lo estas rellenando tú, sino que es otro "proceso" el que lo rellena por ti, y tu no tienes control sobre este (y no quieres realizar un bucle cambiando los valores), puedes capturar el evento "OnGetSelectedIndex" del TTreeView.

Ejemplo:procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
Node.SelectedIndex:=Node.ImageIndex;
end;

Saludos.

xEsk
13-05-2008, 17:40:23
Hola
gracias por la respuesta. Si, se que esa propiedad existe y que por defecto su valor es 0. Mi problema es como hacer para cambiar el valor SelectedIndex durante la ejecución para ponerle el valor del ItemIndex del nodo pulsado, ya que nada más pulsarlo se pone autmaticamente ItemIndex:=SelectedIndex y no al revés que es lo que a mi me interesa. No se si me explico.
A ver si se os ocurre algo.
Gracias y un saludo!

Releyendo tu comentario, me da a pensar, que crees que siempre coge el valor de "ImageIndex", y no es así, cuando un nodo esta seleccionado el valor de la imagen es el del "SelectedIndex" y no el del "ImageIndex". En pocas palabras, que son totalmente independientes uno del otro, uno se usa para los nodos NO seleccionados (ImageIndex) y el otro se usa para los nodos SI seleccionados (SelectedIndex).

Saludos

yomismo24
14-05-2008, 11:31:28
Hola de nuevo!
he leido tus comentarios (muchas gracias por contestar) y a ver si consigo explicar exactamente lo que me pasa. Yo tengo una funcion que va creando los nodos del arbol, y cuando los va creando va poniendo un valor en el ImageIndex de cada nodo 1,2,3 según el tipo de nodo que sea (no está relacionado con la profundidad del nodo, es decir un nodo de profundidad 2, puede tener ImageIndex=1,2,3 indistintamente). Relleno el arbol perfectamente y se muestra tal y como yo quiero.
El problema viene cuando selecciono un nodo, y se me pone la imagen que tiene configurada el SelectedIndex (0 en este caso). Yo lo que quiero es que al seleccionar un nodo, antes de que se me cambie la imagen por la indicada en SelectedIndex, poder cambiar el valor de SelectedIndex para que sea igual a ImageIndex. De esta forma no se cambiaría la imagen del nodo al seleccionarlo.
Espero haberlo explicado bien ahora ;)
Pensé en usar el evento OnClick del arbol, pero ese evento no me proporciona el Nodo sobre el que pulso.
He probado el evento que me indicabas OnGetSelectedIndex pero este evento se produce constantemente, no solo cuando selecciono un nodo.
¿Se te ocurre alguna idea? porque yo ya estoy en blanco jejej
Gracias y un saludo!!

yomismo24
14-05-2008, 11:46:04
Hola
pues eso, que ya lo he solucionado, la final era una tontería (es lo que me pasa por ser novato y no tener mucha idea jejej)
El evento que tenia que usar era el Onchage() que se produce al seleccionar un nodo diferente y además me proporciona el nodo que selecciono. De esta forma lo unico que tengo que hacer es poner en ese evento:

Arbol.Selected.SelectedIndex := Node.ImageIndex;

ya las imagenes se mantienen al cambiar de nodo seleccioando.
Lo dejo aquí escrito por si a alguien le sirve.
Un saludo y muchas gracias por haber ayudado.

xEsk
15-05-2008, 13:54:39
Me alegro que se te haya solucionado, pero esta solución ya te la propuse en uno de mis mensajes, hehe!! xDD

Saludos