Hola ledian.
Alguna vez tuve un probla similar y lo solucione con este procedimiento:
Código Delphi
[-]
procedure Tfrmprincipal.CambiarimagenDescendencia(Nodo: TTreeNode);
var
i:integer;
begin
if nodo.HasChildren=true then
begin
if Nodo.Expanded then
begin
Nodo.ImageIndex := 1;
Nodo.SelectedIndex :=1;
end else begin
Nodo.ImageIndex := 0;
Nodo.SelectedIndex :=0;
end;
for i := 0 to (Nodo.Count - 1) do
begin
CambiarimagenDescendencia(nodo.item[i]);
end;
end else begin
Nodo.ImageIndex := 2;
Nodo.SelectedIndex :=2;
end;
end;
Básicamente lo que hace el procedimiento hace es identificar si el nodo tiene hijos, y si los posee pregunta si esta expandido o no (dependiendo de esto se asigna una imagen de una carpeta abierta o cerrada), si no tiene nodos hijos, asigna otra imagen…
Imagen 1: carpeta expandida si tiene nodos hijos,
Imagen 0: carpeta cerrada si tiene nodos hijos,
Imagen 2: imagen de los nodos que no tienen hijos
Luego lo implementas en el evento Expanded del treeview:
Código Delphi
[-]
TreeviewExpanded(Sender:TObject; Node: TTreeNode);begin
CambiarimagenDescendencia(Node);
end;
Y si quieres algo mas simple:
Código Delphi
[-]
procedure TFTreeView.CambiarNodosHijos;
var
i: Integer;
begin
for i := 0 to TreeView.Items.Count - 1 do
if ( TreeView.Items[i] as TTreeNode ).Level = 0 then
( TreeView.Items[i] as TTreeNode ).ImageIndex := 0
else
( TreeView.Items[i] as TTreeNode ).ImageIndex := 1
end;
Espero te pueda servir, no es el super procedimiento pero creeo que te puede ayudar con lo que buscas.