Copiar del menu emergente

Carlos
23 de Diciembre del 2003
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

sdemingo
23 de Diciembre del 2003

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

Carlos
23 de Diciembre del 2003
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

Jorge
23 de Diciembre del 2003
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

Baltasar
23 de Diciembre del 2003
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.

Abilio (PORTUGAL)
23 de Diciembre del 2003
'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