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

Ayuda quitar menú emergente

Estas en el tema de Ayuda quitar menú emergente en el foro de Visual Basic clásico en Foros del Web. Hola!! Tengo un formulario con sólo un Textbox y un módulo. Lo que quiero hacer es que cuando en el textbox pulse con el botón ...
  #1 (permalink)  
Antiguo 07/02/2006, 10:36
 
Fecha de Ingreso: febrero-2006
Mensajes: 2
Antigüedad: 18 años, 3 meses
Puntos: 0
Ayuda quitar menú emergente

Hola!!
Tengo un formulario con sólo un Textbox y un módulo.
Lo que quiero hacer es que cuando en el textbox pulse con el botón derecho y seleccione la opción -lectura de derecha a izquierda- ese menú emergente se cierre y que esa opción -lectura de derecha a izquierda- no sea ejecutada.

Yo a lo máximo que he llegado ha sido a interceptar cuando paso el cursor, por encima de la opción: -lectura de derecha a izquierda-. Pero me es imposible cerrar el menú y aparte interceptar cuando se pulse la opción y no como he hecho yo cuando paso el cursor..

Tal vez sea algo complicado, pero a ver si alguien me echa una mano..
Dejo el código para que probéis lo que digo:

En el formulario hay un Textbox. Este es el simple código que hay que poner en el formulario:
Código:
Private Sub Form_Load()
    Activa
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Desactiva
End Sub
Y este es el código que hay que poner en el módulo:

Código:
Option Explicit

Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long


Public Const GWL_WNDPROC = (-4)
Global PrevWndProc As Long

Public Sub Activa()
    PrevWndProc = SetWindowLong(Form1.Text1.hWnd, GWL_WNDPROC, AddressOf interceptar)
End Sub

Public Sub Desactiva()
  Dim temp As Long
    temp = SetWindowLong(Form1.Text1.hWnd, GWL_WNDPROC, PrevWndProc)
End Sub

Public Function interceptar(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = &H11F Then 'WM_MENUSELECT = &H11F
        If wParam = -2139062272 Then 'Es el parámetro wParam correspondiente.
            Debug.Print "Has pasado sobre -lectura de derecha a izquierda- " & Now & ""
            interceptar = True
        End If
    Else
        interceptar = CallWindowProc(PrevWndProc, hWnd, Msg, wParam, lParam)
    End If
End Function
Agradecería mucho al menos que alguien me enseñara a cerrar el menú emergente..
Gracias
  #2 (permalink)  
Antiguo 09/02/2006, 12:24
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Ahora, si no has de usar el Menú Emergente en su Totalidad, una buena opción sería impedir q' se accediera a ella...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 10/02/2006, 16:25
 
Fecha de Ingreso: febrero-2006
Mensajes: 2
Antigüedad: 18 años, 3 meses
Puntos: 0
Sí que se puede interceptar el menú al pulsar el botón derecho del ratón, que es como lo tengo actualmente en el programa, pero, son muy útiles las opciones copiar, pegar, cortar, seleccionar todo y eliminar y me gustaría que se pudieran utilizar.
He puesto esta cuestión en varios foros pero nadie ha sabido responderme y al final encontré un proyecto en una página en inglés donde explican cómo insertar una opción en un menú emergente. Así que lo que estoy haciendo es analizar detalle por detalle este proyecto y espero conseguir pronto que la opción -lectura de derecha a izquierda-, no pueda ser seleccionada.

PD. He intentado utilizar la propiedad Text1.RightToLeft = False, pero se puede modificar con pulsando el botón del ratón.
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 12:55.