Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Api EnableMenuItem

Estas en el tema de Api EnableMenuItem en el foro de Visual Basic clásico en Foros del Web. Ya muchachos, aqui con una consulta : Necesito saber como funciona la api enablemenuitem, que es para habilitar y deshabilitar opciones del menu por medio ...
  #1 (permalink)  
Antiguo 19/11/2008, 10:48
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Api EnableMenuItem

Ya muchachos, aqui con una consulta :

Necesito saber como funciona la api enablemenuitem, que es para habilitar y deshabilitar opciones del menu por medio de api's, yo he tratado de todas formas pero aún no puedo acerla funcionar, si alguien tiene algun ejemplo de como usarla , que parametros usa, como se pasan los parametros, etc... le estaria eternamente agradecido

un abrazo cordial y desde ya muuuuuuchas gracias

p.d... ya he leido todas las paginas que encontre con google y tambien la documentacion de microsoft y no he podido hacer nada, asi que porfis no me envien a enlaces encontrados con google... Gracias
  #2 (permalink)  
Antiguo 19/11/2008, 12:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

¿Cuál es exactamente la parte que no entiendes?:
http://msdn.microsoft.com/en-us/libr...36(VS.85).aspx

El primer parámetro es el "Handle" del menú, ¿cómo obtienes ese Handle? GetMenu (http://msdn.microsoft.com/en-us/libr...40(VS.85).aspx). El segundo parámetro es el ID del menú donde se aplicarán los cambios, ¿cómo se obtiene ese ID? GetMenuItemID (http://msdn.microsoft.com/en-us/libr...79(VS.85).aspx). El tercer parámetro es el cambio que quieres aplicar.

Si no entiendes alguna parte, estamos por aquí.

Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 19/11/2008, 14:12
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

gracias david,

como les decia, he leido cantidad de paginas con el funcionamiento de la funcion, tambien he leido las paginas de microsoft pero no aportan mucho. Tengo claro cuales son los parámetros a pasar, pero cuando lo ejecuto con mis parametros, no deshabilita la opcion del menu que en teoria debe hacer.

paso bien el hwdn, paso bien? el id del menu, que efectivamente lo obtengo con las funciones que tu me dices, getmenu y getmenuitemid y efectivamente esos parametros les paso, pero cuando ejecuto la funcion me devuelve -1 que la documentacion me dice que no encontro el id del menu.

el ultimo parametro lo he probado con mf_disabled, mf_byposition +´mf_disabled, mf_bycommand + mf_disabled.... y todas las combinaciones que se me ocurran.. en l mejor de los casos la funcion me devuelve cero, pero no tiene efecto sobre el menu... por eso pedia ejemplos de como utilizarla, ejemplos de codigo queesten corriendo y no de microsoft que no me funcionan...

agradecido por la atencion y saludos
  #4 (permalink)  
Antiguo 19/11/2008, 14:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

Una pregunta, ¿el menú es de tu aplicación o de otra aplicación?. ¿Qué versión de Visual Basic estás usando?. Además, hay que tener en cuenta que MF_DISABLED solo deshabilita la acción del menú (o sea, la apariencia sigue igual), si quieres que su apariencia también esté deshabilitada debes agregar MF_GRAYED.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 19/11/2008, 14:39
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

es de mi aplicacion, visual basic 6.0 y no sabia que solo desabiltaba el menu, sino que solo la ejecucion... voy a probar a ver que onda... insisto.... muchas gracias
  #6 (permalink)  
Antiguo 19/11/2008, 14:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

Aunque si es de tu propia aplicación, ¿no sería más fácil con solo cambiar la propiedad Enabled?:
Código vb:
Ver original
  1. Menu.Enabled = False
.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 19/11/2008, 15:00
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

obviamente que es mucho mas facil..... pero no me sirve... te explico

tengo una tabla con 2 campos :usuario| permiso, ejemplo :
Usuario : Tesorero
Permiso : Caja

en el programa hay una opcion del menu que se llama caja,

por medio de apis recorro los nombres de las opciones del menu y de paso recupero el id (posicion) del menu, si el permiso corresponde a la opcion del menu, lo habilito, sino, lo deshabilito...

con esto me ahorro de estar creando y habilitando a mano cada opcion del menu del sistema y de paso aprendo un poco mas de apis...

y por eso no pedo habilitarlo con menu.enabled=false, porque de esa forma no puedo capturar el nombre del menu, me entiendes?

aprovecho de decirte que no me deshabilito la opcion del menu y tampoco me qito el acceso, o sea igual puedo abrirlo
  #8 (permalink)  
Antiguo 19/11/2008, 15:03
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

Ya, entendí . En fin, ¿has logrado con el MF_GRAYED?.

P.S.: Aunque los menús también es posible recorrerlos con Me.Controls, pero si usas la API, mejor aún.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 19/11/2008, 15:04
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

nada, devuelve -1 o sea no existe el menu :(
  #10 (permalink)  
Antiguo 19/11/2008, 15:05
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Api EnableMenuItem

¿Puedo ver el código que estás usando?.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 19/11/2008, 15:18
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

esta es el procedimiento

Sub Cargar_Menu_En_Tareas(lHwnd As Long, usux As String)
' si el hwnd es 0 sale
If lHwnd = 0 Then Exit Sub

Dim hmenu As Long
Dim i As Long
' redimensiona la lista que almacena los menues
ReDim MenuList(0)

' carga todos los menu en el array
Call List_Menu(lHwnd, hmenu, False)

Dim caption_menu As String
Dim nodo As Node
Dim nn As Integer
' recorre todo el array
Set con = base.OpenRecordset("select * from permisos where usuario='" & usux & "'", dbOpenDynaset)
For i = 1 To UBound(MenuList)
' nivel del menú actual 1 - 2 - 3 - 4 etc...
Nivel = (MenuList(i).level - 1)
' texto del menú
caption_menu = MenuList(i).text

If Nivel < 0 Then Nivel = 0

'If caption_menu = "" Then caption_menu = "<--------->"
If Nivel = 0 Then
Else
con.FindFirst "tarea='" & caption_menu & "'"
If con.NoMatch Then '&H0I
xs = EnableMenuItem(lHwnd, i, MF_BYPOSITION + MF_DISABLED)
Else
xs = EnableMenuItem(lHwnd, i, MF_BYPOSITION + MF_ENABLED)
End If
End If
nn = Nivel
Next i
principal.Show
End Sub
  #12 (permalink)  
Antiguo 19/11/2008, 15:44
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

No veo que estés usando MF_GRAYED, además, no pusiste la parte del código en la que obtienes el menú con GetMenu (hay que tener en cuenta que este solo obtiene el primer nivel de menús, el que aparece en la barra, para obtener los sub-menús hay que usar GetSubMenu).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 19/11/2008, 15:46
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 2 meses
Puntos: 17
Respuesta: Api EnableMenuItem

david, hice algunas modificaciones al procedimiento y funciono, te explico

antes de entrar al ciclo puse :

hmenu=getmenu(principal.hwnd)
cuando llamo la funcion :

enablemenuitem(hmenu,i,mf_disabled)

y por ultimo el llamado a la funcion lo hago desde el mismo formulario que estoy cargando, antes lo hacia desde el formulario de ingreso de usuario y con eso nunca me funciono

gracias por la atencion brindada y si quieres tooodo el codigo te lo mando por mp o a tu correo o no se po' tu me dices como

de verdad muuuuchas gracias y ahora que funciona... a jugar!!!!! jejejejeje
  #14 (permalink)  
Antiguo 19/11/2008, 15:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Api EnableMenuItem

Me alegra que funcione . Hasta la próxima. Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:12.