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:
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?
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. –
Eso es exactamente lo que se debe hacer, simplemente lo intenté y funciona, no tengo conocimiento de nada más, lo siento. –