Yo lo hago recursivamente con éste código>
Código Delphi
[-]Procedure pMainMenuToTreeView(Nodos:TTreeNodes;Padre:TTreeNode;I:TMenuItem);
var j:Integer;
aux:TMenuItem;
n:TTreeNode;
Caption:String;
begin
if ((I.Enabled=False)or(I.IsLine)) then Exit;
for j:=0 to I.Count-1 do
begin
aux:=I.Items[j];
if not(aux.IsLine)then
begin
if(aux.Enabled=True) then
begin
Caption:=StringReplace(aux.Caption,'&','',[]); n:=Nodos.AddChild(Padre,Caption);
end;
pMainMenuToTreeView(Nodos,n,aux);
if(not(aux.IsLine)and(aux.Count>0)) then
n.ImageIndex:=1
else n.ImageIndex:=2;
n.SelectedIndex:=n.ImageIndex;
end;
end;
end;
Por supuesto que si analizan el código anterior se darán cuenta que tambien asigno los indices de las imagenes que tendra el treeView en sus nodos.En mi caso particular lo preciso así como está en el Código; aparte de eso yo
no cargo los item que estén deshabilitados, ni tampoco los item que son separadores(item que son una linea de separacion)

.
Para llamarlo se hace así>
Código Delphi
[-]begin
Arbol.Items.Clear;
pMainMenuToTreeView(Arbol.Items,nil,Menu.Items);
end
Saludos...

POSDATA:Ultimamente estoy dando a conocer algunos códigos personales(secreto) que tenía por ahí guardados.

