Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Habilitar elementos de un menu mediante treeview (https://www.clubdelphi.com/foros/showthread.php?t=48719)

Durbed 02-10-2007 19:59:53

Habilitar elementos de un menu mediante treeview
 
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 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
    // 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.


La franja horaria es GMT +2. Ahora son las 12:23:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi