Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿Es Posible tener 2 o mas TmainMenu en un mismo Form? (https://www.clubdelphi.com/foros/showthread.php?t=79505)

webmasterplc 12-07-2012 18:02:43

¿Es Posible tener 2 o mas TmainMenu en un mismo Form?
 
Buenas hay alguna manera de tener 2 o mas tmainmenu en un formulario y colocarlos visibles e invisibles en tiempo de ejecucion

Al González 12-07-2012 18:06:04

¿Con qué finalidad?
¡Cambio!

webmasterplc 12-07-2012 18:22:03

Estoy desarrollando una aplicacion que tiene dos modulos, uno de Sistema y Otro Administracion, y en ves de crear dos ejecutables crear uno y segun privilegios cambiarme de aplicacion, pero solo cambiaria el Tmainmenu

juanlaplata 12-07-2012 20:29:17

Con una finalidad parecida, en mi caso lo q opte fue por tener:
Perfiles jerarquicos:
1-Administrador
2-Jefe
3-Empleado
Entonces, el administrador al ingresar ve el menu completo, y es quien decide q items del menu ppal. va a ver el Jefe.
Luego el Jefe, al ingresar vera los items q el administrador le asigno, y sera este quien decide q items ve el Empleado.

En un evento post-loqin se recorren todos los items del menu ppal. y se visualizan o no, segun corresponda el item para el perfil del usuario logueado.

Es mas o menos la idea.
En tu caso tendrias un Administrador y dos jefes ...

webmasterplc 12-07-2012 21:19:48

Podras colocar algun ejemplo sencillo de referencia

ecfisa 12-07-2012 22:32:46

Hola webmasterplc.

Una opción es que le asignes niveles a cada categoría de usuario, por ejemplo: Administrador 3, Jefe 2, Operario 1 y luego habilites o no los items de acuerdo al valor asignado en la propiedad Tag de cada TMenuItem.

Para ejemplificar, pone un TMainMenu con el siguiente formato y valores de Tag en sus subitems:
Código:

Menu1          Menu2 
----------------------------
Item1 ,Tag:1    Item1 ,Tag:1
Item2 ,Tag:2    Item2 ,Tag:2
Item3 ,Tag:3    Item3 ,Tag:3

En este ejemplo simple, selecciono el tipo de usuario desde un TComboBox y habilito/desabilito los subitems de acuerdo al nivel de usuario:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
begin
  ComBoBox1.Items.AddObject('Administrador',TObject(3));
  ComboBox1.Items.AddObject('Jefe',TObject(2));
  ComboBox1.Items.AddObject('Operario',TObject(1));
  // Todos los subitems deshabilitados al comenzar
  with MainMenu1 do
    for i:= 0 to Items.Count-1 do
      if Items[i].Count-1 > 0 then
        for j:= 0 to Items[i].Count-1 do
          Items[i].Items[j].Enabled:= False;
end;

// Habilitar subitems acorde al nivel de acceso del usuario
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  LvlAcceso: Integer;
  i,j: Integer;
begin
  LvlAcceso := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
  with MainMenu1 do
    for i:= 0 to Items.Count-1 do
      if Items[i].Count-1 > 0 then
        for j:= 0 to Items[i].Count-1 do
          Items[i].Items[j].Enabled:= LvlAcceso >= Items[i].Items[j].Tag 
end;
Logicamente en tu caso los datos del usuario deberán estar almacenado en alguna tabla de alguna BD.

Saludos.

juanlaplata 13-07-2012 14:19:50

1 Archivos Adjunto(s)
Paso a detallar:
Tabla Permisos:
  • id (AutoInc)
  • idUsuario
  • idTipoUsuario
  • ItemName
Entonces, en un form, tengo un TreeView, el cual cargo con todos los items del menu ppal en el create del form.


Al elegir el Item, se guarda en la tabla de permisos.
Debes optar una de dos alternativas.
Son permisos o restricciones.
Es decir (permiso) El usuario no verá ningin item hasta q le asignes alguno.
o (restriccion ) ve todos los items, salvo los q quieras ocultar.

Lo mas facil es reestringir, ya q el menu se ve completo en principio, y le vas ocultando items segun corresponda.
Al producirse un cambio de usuario, el menu debera verse completo por un instante, hasta q se oculten los items (restricciones) del nuevo usuario.

webmasterplc 13-07-2012 14:45:21

tienes algun ejemplo en codigo si puedes

juanlaplata 13-07-2012 15:09:44

Cargar menu en Treeview:

Código Delphi [-]
procedure Cargar_Menu(topItem:TTreeNode;Items:TMenuItem); 
var i:integer;     
     Nodo: TTreeNode;     
     items2:TMenuItem; 
begin 
for i:=0 to Items.Count-1 do    
  begin         
    with TTreeview1.Items do              
    begin              
      if(Items[i].Caption <>'-')and(Items[i].Visible)then                  
        begin                  
        Nodo:= AddChild(TopItem, StringReplace(Items[i].Caption,'&','',[]));                   
        items2:=  Items[i];                  
        Cargar_Menu(Nodo,items2);                  
        end;              
    end;    
  end; 
end;



Ocultar Items:
Código Delphi [-]
procedure Permisos_Menu(idUs, tipoUs:integer); 
var i:integeR;     
     item : Tcomponent; 
begin permisos.Close; 
  permisos.Params[0].AsInteger:=idUs; 
  permisos.Params[1].AsInteger:=TipoUs; 
  permisos.Open; permisos.First; 
  for i:= 0 to permisos.RecordCount-1 do    
    begin    
    item:=findComponent(permisosItemName.AsString);    
    if item <> nil then  item.visible := False ;    
    permisos.Next;    
    end; 
end;


La franja horaria es GMT +2. Ahora son las 09:49:22.

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