Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Ayuda quitar menú emergente (http://www.forosdelweb.com/f69/ayuda-quitar-menu-emergente-369317/)

kafmany 07/02/2006 10:36

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

David 09/02/2006 12:24

Ahora, si no has de usar el Menú Emergente en su Totalidad, una buena opción sería impedir q' se accediera a ella...

kafmany 10/02/2006 16:25

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.


La zona horaria es GMT -6. Ahora son las 06:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.