PDA

Ver la Versión Completa : Habilitar elementos de un menu mediante treeview


Durbed
02-10-2007, 19:59:53
Quiero que automáticamente se cargue un JvCheckTreeView con los elementos del menú de la aplicación y mediante la propiedad Checked de la lista se activen o desactiven los elementos del menú.

Espero haberlo explicado bien, un saludo y gracias.

Durbed
02-10-2007, 20:25:39
Ya he conseguido cargar el árbol gracias a un ejemplo extraído de la pagina de neftali http://neftali.clubdelphi.com (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í:
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
// Para cada elemento del menu
for i:= 0 To (Menu.Count - 1) Do Begin
// Es un elemento correcto
If Not(Menu.Parent Is TMenuItem) then begin
// Crear el elemento asignarle el índice de la imagen
Nodo:= TreeView1.Items.Add(Nil, Stripped('&', Menu.Items[i].Caption));
Nodo.ImageIndex := Menu.Items[i].ImageIndex;
End
Else begin
// Crear un hijo
Nodo:= TreeView1.Items.AddChild(Nod, Stripped('&', Menu.Items[i].Caption));
Nodo.ImageIndex := Menu.Items[i].ImageIndex;
end;

// Llamada recursiva para los submenus
If Menu.Items[i].Count > 0 Then begin
VerificaMenu(Menu.Items[i], Nodo);
end;
End;
End;

Durbed
03-10-2007, 13:20:36
Ahora necesito vincular los elementos del TreeView* con los elementos del menú, para así poder guardar los datos referentes a los permisos en un StringList que luego almacenare en la base de datos. Es decir que al picar sobre el primer nodo sepa que se corresponde con el elemento "Archivo1" del menú y me añada una linea al StringList de esta forma: "Archivo1=S"

Posteriormente desde la pantalla de permisos y picando sobre cada usuario se tiene que poder recuperar la información para rellenar el TreeView*.

La idea es que sea algo que se genere automáticamente a partir del menú porque si en el futuro voy añadiendo módulos al programa, no quisiera tener que retocar la parte de los permisos.

A ver si algún preclaro de los que rondan por el foro me puede ayudar. Un saludo y gracias.



* Realmente uso el componente JVCheckTreeView que añade la propiedad checked a los nodos del TreeView y hereda de TreeView.