Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ocultar menus en aplicacion usando MainMenu

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ocultar menus en aplicacion usando MainMenu Responder citando

Hola amigos del foro. Tengo un problema con una aplicacion y el uso de menus, les explico.
En mi aplicacion (desarrollada en c++ builder 6) manejo usuarios de distintos niveles, administrador, invitado, etc.. Los usuarios con nivel Administrador deben tener acceso a todos los menus disponibles de la aplicacion. Por ejemplo: Archivo, Auditoria, Reportes, Contraseñas.
Y Los usuarios invitados solo tener acceso a Archivo y Reporte.
Lo que quiero hacer es que estos menus no sean visibles con este tipo de usuarios invitados. He estado probando con las propiedades Visible=True o false de los TMenuItem del componente MainMenu pero no logro hacer esto.
Les agradeceria mucho su ayuda ya que es para un proyecto muy importante que estoy desarrollando.
Gracias y saludos a todos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: posible respuesta Responder citando

lo que hice es que cuando daba click un usuario en un menu que no este permitido mande un mensaje de seguridad.

usando un if(TableTipo->String=="U")
{
}
else
{
}
_________________
uno esta donde quiere estar.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Pudes ayudarte de la siguiente funcion, que te permite buscar una opcion dentro de un Menú, lo que hace es regresarte un TMenuItem y a partir de El puedes modificar las opciones.

Código:
//---------------------------------------------------------------------------
// funcion que busca una opcion dentro de un menu
// regresa el TMenuItem si lo encuentra, por el momento solo
// busca en 4 niveles hacia adentro contando la primera opcion como 0 *cero
TMenuItem * __fastcall TccsgAccesoPrograma::BuscaOpcion(TMenu *Menu, AnsiString Opcion)
{
   TMenuItem *item;
   item = Menu->Items->Find(Opcion);
   if(item!= NULL)
      return(item);

   int Opc,Opc1,Opc2,Opc3;
   Opc=0;
   while( Opc < Menu->Items[0].Count)
   {
      Application->ProcessMessages();
      item = Menu->Items[0].Items[Opc]->Find(Opcion);
      if(item!= NULL)
         return(item);
      else
      {
         if(Menu->Items[0].Items[Opc]->Count)
         {
            Opc1=0;
            while( Opc1 < Menu->Items[0].Items[Opc]->Count )
            {
               Application->ProcessMessages();
               item = Menu->Items[0].Items[Opc]->Items[Opc1]->Find(Opcion);
               if(item!= NULL)
                  return(item);
               else
               {
                  if(Menu->Items[0].Items[Opc]->Items[Opc1]->Count)
                  {
                     Opc2=0;
                     while( Opc2 < Menu->Items[0].Items[Opc]->Items[Opc1]->Count)
                     {
                        Application->ProcessMessages();
                        item = Menu->Items[0].Items[Opc]->Items[Opc1]->Items[Opc2]->Find(Opcion);
                        if(item!= NULL)
                           return(item);
                        else
                        {
                           if(Menu->Items[0].Items[Opc]->Items[Opc1]->Items[Opc2]->Count)
                           {
                              Opc3=0;
                              while( Opc3 < Menu->Items[0].Items[Opc]->Items[Opc1]->Items[Opc2]->Count)
                              {
                                 Application->ProcessMessages();
                                 item = Menu->Items[0].Items[Opc]->Items[Opc1]->Items[Opc2]->Items[Opc3]->Find(Opcion);
                                 Opc3++;
                                 if(item!= NULL)
                                    return(item);
                                 else
                                    return(NULL);
                              }
                           }
                        }
                        Opc2++;
                     }
                  }
               }
                Opc1++;
            }
         }
      }
      Opc++;
   }
   return(NULL);

}
//---------------------------------------------------------------------------


Esta opcion aun que un poco larga, te permite pasar como parametros el Menu donde quieres buscar la opcion y te regresa el Menu Item para modificarlo
y para usarla puedes generar algo como esto.


Código:
   TMenuItem *Opc;
   AnsiString Opcion = "Salir";
   bool Estado = false; //en este caso desactivamos
   Opc = BuscaOpcion(MainMenu1,Opcion); //pasamos el Menu y la opcion a deshabilitar.
      if(Opc!=NULL) // si despues de buscarlo no es igual a NULL la opcion existe
         Opc->Enabled = Estado;



Saludos espero te sirva.

pd: la funcion es un poco vieja pero es funcionable para lo que necesitas
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Gracias por la ayuda Responder citando

Gracias Cesar por la ayuda, en realidad me sirvio mucho tu ayuda.
Aunque era mucho mas sencillo lo que estaba buscando, me base en tu codigo y de esa manera pude ocultar o mostrar menus en mi form de acuerdo al usuario.
Les dejo el codigo final tal cual me quedo y asi oculto los menus.

void MenuUser(){
if(((md->Qsesion->FieldByName("nivel")->AsString == "A") && (md->Qsesion->FieldByName("subnivel")->AsString == "A"))){
FrmMain->MainMenu1->Items[0].Items[3]->Visible=true;
FrmMain->MainMenu1->Items[0].Items[5]->Visible=true;
}
else{
FrmMain->MainMenu1->Items[0].Items[3]->Visible=false;
FrmMain->MainMenu1->Items[0].Items[5]->Visible=false;
}
}

Los usuarios los almaceno en una tabla y cuentan con niveles y subniveles de autorizacion. Solo los usuarios con nivel A y subnivel A tienen acceso a todos los menus.

Muchisimas gracias de nuevo y con esto ya tengo un gran avance en mi proyecto. Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.