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:
Y este es el código que hay que poner en el módulo:Private Sub Form_Load() Activa End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Desactiva End Sub
Código:
Agradecería mucho al menos que alguien me enseñara a cerrar el menú emergente..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
Gracias