Lo que quieres es trabajo para el
VirtualStringTree
lo he usado y es extremadamente rápido con millones de nodos, es un Treeview, pero hace las veces de ListView y Grid.
En cuanto a tu pregunta, en esta linea de código, saca el imageIndex que ha de usar para pintarlo, lo hace a partir del FullID definido en el tipo de dato TShellItem. No lo he mirado con lupa, pero me parece logico que al indicar un imageIndex en el Item que se anade (de tipo TShellItem) automaticamente coja la imagen.
Código Delphi
[-]
ImageIndex := GetShellImage(FullID, ListView.ViewStyle = vsIcon, False);
Me ha picado la curiosidad y he hecho esto
Código:
// linea de codigo 573
Item.Caption := DisplayName;
Item.ImageIndex := -1; //ImageIndex;
...Y ohh!! sorpresa, ya no aparecen los iconos en el ListView.
Como ves los tipos de datos del Shell son muy intuitivos y simples
En contrapartida a esta tecnica, podrías usar la función:
Código Delphi
[-]
var icono :Ticon;
lpicono:Word;
begin
lpicono := 1; icono.Handle:=ExtractAssociatedIcon(handle,pchar('c:\autoexec.bat'),lpicono);
Que te devuelve un icono y puedes anadirlo a un ImageList.
saludos