Código Delphi
[-]
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');
tvLista.Items.Item[0].ImageIndex:=1;
...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');
tvLista.Items.Item[0].ImageIndex:=5;
Igual es un error de copy & paste, pero ahí estás asignando el mismo item[0] distintos imageIndex, por tanto, todos tendrán el mismo.
El truco está en guardar temporalmente el nodo que has añadido, tal y como hace
xEsk, aunque yo cambiaría el nombre a la variable para que quedara más claro:
Código Delphi
[-]
NewItem:=tvLista.Items.Add(nil,'Titulo 1');
NewItem.ImageIndex:=1;
...
NewItem:=tvLista.Items.Add(nil,'Titulo 2');
NewItem.ImageIndex:=5;
...
Como ves, primero se añade un elemento nuevo y se guarda la referencia en NewItem y ahora, se le cambia el imageIndex a ese NewItem. Ahí está la diferencia entre tu código y el de
xEsk
Ese error que te da de "imageIndex no declarado" es extraño, lo estoy mirando y en delphi 7 si me aparece la propiedad imageIndex para un TTreeNode
Saludos