Ya he conseguido cargar el árbol gracias a un ejemplo extraído de la pagina de neftali
http://neftali.clubdelphi.com Ahora ya solo queda guardar los permisos de acceso a los menús en la base de datos y restaurarlos aplicando las propiedades enable o visible (aun no lo he decidido), a los elementos del menú.
Por si alguien no se ha dado cuenta es para restringir el acceso a partes del sistema a los diferentes tipos de usuarios.
Neftali el ejemplo funciona de lujo, pero he mejorado el procedimiento VerificarMenu añadiéndole la función Stripped extraída de trucomania, el código queda así:
Código Delphi
[-] procedure VerificaMenu(Menu: TMenuItem; Nod: TTreeNode);
function stripped(stripchar : char; str : string) : string;
var
tmpstr : string;
begin
tmpstr := str;
while pos(stripchar, tmpstr) > 0 do
delete(tmpstr, pos(stripchar, tmpstr), 1);
stripped := tmpstr;
end;
Var
i: Integer;
Nodo: TTreeNode;
Begin
for i:= 0 To (Menu.Count - 1) Do Begin
If Not(Menu.Parent Is TMenuItem) then begin
Nodo:= TreeView1.Items.Add(Nil, Stripped('&', Menu.Items[i].Caption));
Nodo.ImageIndex := Menu.Items[i].ImageIndex;
End
Else begin
Nodo:= TreeView1.Items.AddChild(Nod, Stripped('&', Menu.Items[i].Caption));
Nodo.ImageIndex := Menu.Items[i].ImageIndex;
end;
If Menu.Items[i].Count > 0 Then begin
VerificaMenu(Menu.Items[i], Nodo);
end;
End;
End;