Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
¿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
Responder Con Cita
  #2  
Antiguo 12-07-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿Con qué finalidad?
¡Cambio!
Responder Con Cita
  #3  
Antiguo 12-07-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 12-07-2012
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
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 ...
Responder Con Cita
  #5  
Antiguo 12-07-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
Podras colocar algun ejemplo sencillo de referencia
Responder Con Cita
  #6  
Antiguo 12-07-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 13-07-2012
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
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.
Imágenes Adjuntas
Tipo de Archivo: jpg untitled2.jpg (37,6 KB, 8 visitas)

Última edición por juanlaplata fecha: 13-07-2012 a las 14:25:47.
Responder Con Cita
  #8  
Antiguo 13-07-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 274
Poder: 17
webmasterplc Va por buen camino
tienes algun ejemplo en codigo si puedes
Responder Con Cita
  #9  
Antiguo 13-07-2012
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
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;

Última edición por juanlaplata fecha: 13-07-2012 a las 15:14:20.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Es posible que en el Form1 sea reconocido algún componente del mismo. mrnovice OOP 2 08-07-2008 19:43:52
TmainMenu no en top del form jonmendi OOP 1 14-04-2008 17:19:53
¿ Es posible realizar una inserción sin tener una transaccion abierta ? TrUnkS Conexión con bases de datos 1 03-02-2007 02:10:34
Es posible al mismo tiempo Sum(...), Group y Join ? gluglu SQL 1 29-12-2005 15:22:57
Es posible tener varias bases de datos.... Carlosguiland MySQL 5 24-06-2004 20:39:10


La franja horaria es GMT +2. Ahora son las 13:04:24.


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
Copyright 1996-2007 Club Delphi