Visual Basic - DUDA con un UserControl

Life is soft - evento anual de software empresarial
 
Vista:

DUDA con un UserControl

Publicado por Fernando Rios (2 intervenciones) el 28/09/2003 05:41:47
Tengo unas dudas muy especificas respecto a los menús contextuales:
Estoy creando un UserControl basado en un TextBox, que solo acepta
caracteres que cumplen con ciertas condiciones, pero... si se me ocurre darle click con el botón secundario de la rata, el menu contextual me permite PEGAR, y si tengo una cadena de caracteres en el CLIPBOARD, la pega sin mas. Esto no lo quiero. LA DUDA ES: ¿COMO DESHABILITO EL MENU CONTEXTUAL?
Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DUDA con un UserControl

Publicado por Juan (284 intervenciones) el 28/09/2003 12:23:35
Si tienes la MSDN Library del Visual Studio puedes encontrar un ejemplo en:
Books/Hardcore Visual Basic/Chapter 6: .../Sending and receiving messages/Receiving messages/Your own window procedure.

Si no lo encuentras me lo dices y te lo pego aquí. Por cierto, ¿has deshabilitado ya la posibilidad de copiar con las teclas Shift+Insert?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DUDA con un UserControl

Publicado por Cecilia Colalongo (3116 intervenciones) el 28/09/2003 12:49:07
Fijate con esto, lo tengo en un control similar y me funciona sin problemas:

Public Const GWL_WNDPROC = -4
Public Const WM_CUT = &H300
Public Const WM_COPY = &H301
Public Const WM_PASTE = &H302
Public Const WM_CLEAR = &H303
Public Const WM_RBUTTONUP = &H205
Public Const WM_CONTEXTMENU = &H7B

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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private mlngPrevWndProc As Long
Public mlngHWnd As Long

Public Sub Hook(hWnd As Long)
mlngHWnd = hWnd

mlngPrevWndProc = SetWindowLong(mlngHWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHook()
Dim lngReturnValue As Long

lngReturnValue = SetWindowLong(mlngHWnd, GWL_WNDPROC, mlngPrevWndProc)
End Sub

Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_CUT
'Do nothing
Case WM_COPY
'Do nothing
Case WM_PASTE
'Do nothing
Case WM_CLEAR
'Do nothing
Case WM_RBUTTONUP
'Do nothing
Case WM_CONTEXTMENU
'Do nothing
Case Else
WindowProc = CallWindowProc(mlngPrevWndProc, hw, uMsg, wParam, lParam)
End Select
End Function

Esto en un módulo y en el control:

Private Sub UserControl_EnterFocus()
Hook txtMask.hWnd
End Sub

Private Sub UserControl_ExitFocus()
UnHook
End Sub

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DUDA con un UserControl

Publicado por Fernando Rios (47 intervenciones) el 30/09/2003 08:25:58
Gracias por el código, que amable!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar