Private Sub Form_Load()
hOldTxtWnd = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf NewWndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Text1.hWnd, GWL_WNDPROC, hOldTxtWnd
End Sub
添加一个模块,代码如下:
Option Explicit
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_PASTE = &H302
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 hOldTxtWnd As Long
Public Function NewWndProc(ByVal h As Long, ByVal m As Long, ByVal w As Long, ByVal l As Long) As Long
If m = WM_PASTE Then
MsgBox "You Pasted Some Text!", vbInformation, "Hehe~~~"
End If
NewWndProc = CallWindowProc(hOldTxtWnd, h, m, w, l)
End Function
optional explicit
private enum TxtChangeReason
byKeyboardInput=0
byKeyPaste=1
byMousePaste=2
end enum
dim m_Reason as TxtChangeReason
private sub text1_mousedown(x.....)
m_reason=2
end sub
private sub text1_keydown(keycode as integer,shift as integer)
if shift=vbctrlmask and keycode=vbkeyv then
m_reason=1
else
m_reason=0
end if
end sub