Copiar del menu emergente
Buenos dias y gracias de antemano,
Estoy realizando una aplización en Vb 6 y mi problema es el siguiente,
en algunas cajas de texto valido los datos que voy a introducir, como por ejemplo dejar escribir solo numeros. En el evento Keypress de las cajas valido los datos, pero si en una caja pulsan el botón derecho y pegan no puedo validar el dato.
Si tiene alguna idea de como solucionar esto le estaría muy agradecido.
Muchas gracias y Feliz Navidad
Estoy realizando una aplización en Vb 6 y mi problema es el siguiente,
en algunas cajas de texto valido los datos que voy a introducir, como por ejemplo dejar escribir solo numeros. En el evento Keypress de las cajas valido los datos, pero si en una caja pulsan el botón derecho y pegan no puedo validar el dato.
Si tiene alguna idea de como solucionar esto le estaría muy agradecido.
Muchas gracias y Feliz Navidad
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
MsgBox "El usuario ha pinchado con el botón derecho del ratón en el text"
End If
End Sub
Muchas gracias pero no era eso a lo que me referia, con en ejemplo que tu me dices sabes si han pulsado el boton derecho encima de la caja, pero yo quiero que cuando lo pulsen y elijan la opcion de pegar, antes de que me inserte el texto en la caja poder evaluar el contenido. Igual que puedo controlar si se ha pulsado Control + V mediante el KeyCode no se si existe alguna forma de controlar cuando se pega desde el menu emergente.
Gracias de nuevo
Gracias de nuevo
Se me ocurren un par de ideas (hay otra qu es deshabilitar el menu, pero es mas complejo) que son utilizar el evento Change, o impedir que realicen el pegado bloqueando el control(en el mousedown locked=true y en el mouseup locked=false)
Un saludo
Un saludo
También puedes actuar en el evento lostfocus, que se genera cuando "abandonas" un textbox (o cualquier control). En ese momento puedes hacer la comprobación, y si el contenido no es permitido, devuelves el control a dicho textbox (o el control que sea) mediante TEXT1.SETFOCUS
Suerte.
Suerte.
'Coloca este código num módulo
Public Const GWL_WNDPROC = (-4)
Public lpPrevWndProcTEXT As Long
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 WM_RBUTTONDOWN = &H204
Public Function TextHOOK(ByVal hw As Long, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case lMsg
Case Is = WM_RBUTTONDOWN
MsgBox ("Coloca aqui o teu código ou não coloques nada. Repara que o PopUp menu não aparece")
Case Else
TextHOOK = CallWindowProc(lpPrevWndProcTEXT, hw, lMsg, wParam, lParam)
End Select
End Function
'-------------------------------------------------------------------
'Coloca este código em Form1
'Coloca um textbox control chamado Text1 em Form1
'-------------------------------------------------------------------
Private Sub Form_Load()
'Subclass textbox
lpPrevWndProcTEXT = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf TextHOOK)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim RetVal As Long
'Não esquecer de fazer unsubclass
RetVal = SetWindowLong(Text1.hwnd, GWL_WNDPROC, lpPrevWndProcTEXT)
End Sub
'-------------------------------------------------------------------------------
'Dá um Click com o botão direito do rato
'Como poderás verificar, o menu popup já não existe
Public Const GWL_WNDPROC = (-4)
Public lpPrevWndProcTEXT As Long
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 WM_RBUTTONDOWN = &H204
Public Function TextHOOK(ByVal hw As Long, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case lMsg
Case Is = WM_RBUTTONDOWN
MsgBox ("Coloca aqui o teu código ou não coloques nada. Repara que o PopUp menu não aparece")
Case Else
TextHOOK = CallWindowProc(lpPrevWndProcTEXT, hw, lMsg, wParam, lParam)
End Select
End Function
'-------------------------------------------------------------------
'Coloca este código em Form1
'Coloca um textbox control chamado Text1 em Form1
'-------------------------------------------------------------------
Private Sub Form_Load()
'Subclass textbox
lpPrevWndProcTEXT = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf TextHOOK)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim RetVal As Long
'Não esquecer de fazer unsubclass
RetVal = SetWindowLong(Text1.hwnd, GWL_WNDPROC, lpPrevWndProcTEXT)
End Sub
'-------------------------------------------------------------------------------
'Dá um Click com o botão direito do rato
'Como poderás verificar, o menu popup já não existe
