Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con imagenes de Treeview (https://www.clubdelphi.com/foros/showthread.php?t=56239)

yomismo24 12-05-2008 13:26:00

Problema con imagenes de Treeview
 
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:
Código Delphi [-]
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:
Código Delphi [-]
procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
  Node.SelectedIndex:=Node.ImageIndex;
end;

Saludos.

xEsk 13-05-2008 17:40:23

Cita:

Empezado por yomismo24 (Mensaje 286254)
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

Solucionado!!
 
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


La franja horaria es GMT +2. Ahora son las 03:18:25.

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