| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
HumbertoD Cdt

Registrado: 26 Oct 2007Mensajes: 2
|
Publicado: Vie 26 Oct, 2007 6:15 pm Asunto: Ocultar menus en aplicacion usando MainMenu |
|
|
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 |
|
 |
cadejo Cdt


Registrado: 13 Jun 2003Mensajes: 21Ubicación: un rincon cerca del cielo chiapas , mexico ups ahora kansas usa
|
Publicado: Dom 28 Oct, 2007 9:46 pm Asunto: posible respuesta |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 29 Oct, 2007 9:56 am Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
HumbertoD Cdt

Registrado: 26 Oct 2007Mensajes: 2
|
Publicado: Lun 29 Oct, 2007 5:22 pm Asunto: Gracias por la ayuda |
|
|
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 |
|
 |
|