cad有些字体显示不了:VB中的文本框怎样设置为不能使用右键

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 14:09:46
只要用户对其不能修改即可,或者使用标签但有竖直滚动条
locked属性已经设置为True,但是还能使用右键,只是不能用剪切功能了
Enable属性设置为false后滚动条就不能用了。

一种简单的方法:

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Text1.Enabled = False '禁止出现系统菜单
PopupMenu abc1 '显示自已的菜单或做其它的事
Text1.Enabled = True
End If
End Sub

另一种复杂一点的:

Option Explicit

Public OldWindowProc As Long
' 保存默认的窗口函数的地址
Public Const WM_CONTEXTMENU = &H7B
' 当右击文本框时,产生这条消息

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 = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)
' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理
Exit Function
End If
SubClass1_WndMessage = True
End Function

窗体的代码:

Option Explicit

Private Const GWL_WNDPROC = (-4)

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Exit Sub
OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
' 取得窗口函数的地址
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)
' 用SubClass1_WndMessage代替窗口函数处理消息
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Exit Sub
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)
' 恢复窗口的默认函数
PopupMenu usermenu
' 弹出自定义菜单
End Sub

上面写的是简单的方法?我觉得也够复杂的。我以前做过类似工作,可以给你一个思路:在change事件中将文本框设为change之前的信息。这样我觉得应该相对简单,而且不用调用win api。不过,也要根据你的具体情况而定,有可能要加一些标志。

locked属性为True就锁定了

有没有Enable属性?设置为false

MouseDown时如果button=2那么文本框.enable=false,Up时在变成true。我猜的,你试试