只允许输入数字,同时禁止粘贴:模块代码: Public OldWindowProc As LongDeclare 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Public Const GWL_STYLE = (-16) Public Const ES_NUMBER = &H2000 Public Const GWL_WNDPROC = (-4)Private Const WM_CONTEXTMENU = &H7B Private Const WM_PASTE = &H302 Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If (msg <> WM_PASTE) And (msg <> WM_CONTEXTMENU) Then NewWindowProc = CallWindowProc(OldWindowProc, hWnd, msg, wParam, lParam) End If End Function-------------------------------------------窗体代码: Private Sub Form_Load() Dim style As Long style = GetWindowLong(Text1.hWnd, GWL_STYLE) SetWindowLong Text1.hWnd, GWL_STYLE, style Or ES_NUMBER OldWindowProc = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf NewWindowProc) End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong Text1.hWnd, GWL_WNDPROC, OldWindowProc End Sub
Public OldWindowProc As LongDeclare 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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const ES_NUMBER = &H2000
Public Const GWL_WNDPROC = (-4)Private Const WM_CONTEXTMENU = &H7B
Private Const WM_PASTE = &H302
Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If (msg <> WM_PASTE) And (msg <> WM_CONTEXTMENU) Then
NewWindowProc = CallWindowProc(OldWindowProc, hWnd, msg, wParam, lParam)
End If
End Function-------------------------------------------窗体代码:
Private Sub Form_Load()
Dim style As Long
style = GetWindowLong(Text1.hWnd, GWL_STYLE)
SetWindowLong Text1.hWnd, GWL_STYLE, style Or ES_NUMBER
OldWindowProc = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf NewWindowProc)
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Text1.hWnd, GWL_WNDPROC, OldWindowProc
End Sub