2011-06-03 14 views
5

Estoy convirtiendo una vista en árbol del TTreeView estándar para usar TVirtualStringTree. Mi desafío final es implementar una función en la que necesito dibujar un indicador de estado "aprobado/suspenso" en la parte superior del icono del nodo conocido. Con TTreeView utilicé:Cómo representar mejor un icono de superposición sobre el ícono básico del nodo Delirtual TVirtualTreeView

var 
    R : TRect; 
    begin 
    R := Node.DisplayRect(True); 
    StatusIconList.Draw(TreeView1.Canvas, 
         R.Left - StatusIconList.Width - 14, 
         R.Top, 
         3 {MyOverlayImageIndex}); 

El resultado es la cruz roja sobre el icono de base, como se muestra a continuación:

enter image description here

con TVirtualStringTree esperaba encontrar ya sea una mejor manera, o para obtener un mejor posiciones conocidas para la posición del icono de superposición requerido. Estoy haciendo:

procedure DrawFailed; 
    var 
    R : TRect; 
    begin 
     R := CellRect; 
     StatusIconList.Draw(TargetCanvas, 
          R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel(Node) * 16, 
          R.Top, 
          siiFailed); 
    end; 

¿Es esta la mejor solución? ¿Hay una mejor manera de obtener la esquina superior/izquierda del ícono básico sin la horrible llamada a nivel de nodo?

Respuesta

8

Obtiene el parámetro Kind: TVTImageKind en su controlador de eventos OnGetImageIndex. Verifíquelo para ikOverlay y simplemente devuelva el índice de imagen apropiado.

+0

Ese es un buen punto, gracias. He agregado un par de imágenes a mi lista de imágenes (por ejemplo, índices 8 y 9), llamadas MyImageList.Overlay (8,0) y MyImageList.Overlay (9,1) y he ordenado que OnGetImageIndex devuelva 0 o 1 cuando Kind es ikOverlay . Sin embargo, no aparecen superposiciones, solo los íconos básicos. ¿Hay algún otro interruptor que deba configurar, por favor? Gracias. –

+1

Eso es exactamente lo que se debe hacer, simplemente lo intenté y funciona, no tengo conocimiento de nada más, lo siento. –

Cuestiones relacionadas