text控件的拷贝和粘贴功能是系统的,所以无法禁止。
解决方案 »
- 如何让无窗口的vb应用程序(在vb中没有添加任何窗体,从main()启动的)之间相互通信,怎么发送,如何接收,就像用sendmessage一样(但这个需要窗口句柄)?
- 除了 GETOBJECT 有没有其他方法可以获取系统中已经在运行的实例?
- 修改外部程序标题信息问题
- 一个组合查询的问题,请大家看看
- 解决这个问题,愿以500分作为酬谢
- 数据环境(DataEnvironment)中资料来源要用存储过程,而存储过程的参数是通过一窗体动态的获得,请问参数该如何传递?
- 这个错误怎么回事?
- 怎样把Doc的某一页设为当前页,或者是活动页?
- 快!快快!!来拿分呀!!!!!!!!一个简单问题。
- 谁知道用API如何调出目录选择窗口
- VB6.0中,怎样调用sql server上的存储过程?
- 小第关于VB的几个问题:
If KeyCode = vbKeyControl Then
If Len(Clipboard.GetText) > 0 Then
Clipboard.Clear
End If
End If
End Sub
'Form1: Text1
Option Explicit
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyControl Then
If Len(Clipboard.GetText) > 0 Then
Clipboard.Clear
End If
End If
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
' 取得窗口函数的地址
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)
' 用SubClass1_WndMessage代替窗口函数处理消息
End If
End Sub
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)
' 恢复窗口的默认函数 ' 弹出自定义菜单
End If
End Sub'Module1:
Option Explicit
Public OldWindowProc As Long
' 保存默认的窗口函数的地址
Public Const WM_CONTEXTMENU = &H7B
' 当右击文本框时,产生这条消息
Public Const GWL_WNDPROC = (-4)Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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 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 Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long
If Msg = WM_CONTEXTMENU Then
SubClass1_WndMessage = True
Else
SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)
' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理
End If
End Function
更简单的方法:
在Keydown事件下
if (keycode=118 or keycode=86)and shift=2 then
text1.locked=true
end if
然后再在Keyup事件中加
text1.locked=false
不就ok了嘛!!!!
Easy!!!
有空多交流:[email protected]
最好是能够截获"Ctrl+V",然后取消它。
就像keypress中一样,可以把Keyascii赋值为零来截获键盘输入,并取消不合规则的输入。3、我试着使用SendMessage:
If (KeyCode = 86 Or KeyCode = 118) And CtrlDown Then
Beep
'屏蔽
SendMessage TextInput.hwnd, EM_SETREADONLY, True, ByVal 0&
Else
'恢复
SendMessage TextInput.hwnd, EM_SETREADONLY, False, ByVal 0&
End If
同时又出现新的问题
该text控件用于接受汉字输入,若SendMessage给它,设为只读,则此时中文输入法被取消,当再次按下按键,Sendmessage会取消它的只读,中文输入法恢复,但此时Text控件首先已收到一个英文字母,然后才能输入汉字。请问如何避免此英文字母的输入,让Text控件立即能接收到汉字。SJSOFT(E品风华)朋友的方法与此法类是。希望大家能够提供更好的方法,否则只能用Clipboard.Clear 了。
我用Clipboard.Clear 后,但剪切板好像没有执行这条命令,那位大侠知道为何?