如何实现在文本框里面单击右键时不弹出窗口(不用API函数实现)

解决方案 »

  1.   

    if(单击右键) then
    end if
      

  2.   

    不用 API 也可以实现。添加一个定时器控件 Timer1在文本框的 MouseDown 事件中编写以下代码:                         if Button=2 then text.Enable=false也就是说当按下鼠标右键则文本框不可用,此时便不会弹出右键菜单了。接着须将文本框还原为可用,即 text.Enable=True这时你就利用 Timer 控件了。设置 Timer 每隔 0.2 秒(时间短一点好些)检查一次文本框是否可用。如不可用,则将其 Enable 属性设为 True .这样也就达到了隐藏右键菜蛋,同时又不影响文本框响应事件的目的了。(如果觉得可以,就给几分看看:)
      

  3.   

    用API怎么实现阿?谁给点代码(学习中)
    马上结帖!!!!!!!
      

  4.   

    '模块中
    Public OldWinProc 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 SubClass_WndMessage(ByVal hwnd As _
        OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wParam As OLE_HANDLE, _
        ByVal lParam As Long) As Long
        If Msg <> WM_CONTEXTMENU Then
            SubClass_WndMessage = CallWindowProc(OldWinProc, _
                hwnd, Msg, wParam, lParam)
                ' 如果消息不是WM_CONTEXTMENU,就调用系统的窗口处理函数
        Else
            SubClass_WndMessage = True
        End If
        
    End Function
    '窗体中,放一TextBox
    Option ExplicitPrivate Sub Form_Load()
        OldWinProc = GetWindowLong(Text1.hwnd, GWL_WNDPROC)
        SetWindowLong Text1.hwnd, GWL_WNDPROC, AddressOf SubClass_WndMessageEnd Sub
      

  5.   

    居然不给分:( 好,我再来如果你想用 API 来实现,那才是最好的解决方法。先在一般模块中声明两个 API 函数:SetWindowLong 和 CallWindowProc,已经声明常数 WM_RBUTTONDOWN(这些都可以在 API 浏览器中找到)。接着编写一个子过程拦截文本框的右键消息(必须放在一般模块中):Public Function newTxtFunc(ByVal hWnd as long,ByVal Msg as long,ByVal wParam as _ long ,ByVal lParam as long)as longIf Msg=WM_RBUTTONDOWN thenelse
           newTxtFunc=CallWindowProc(hWnd,Msg,wParam,lParam)
    end if
    接着你在窗口的 Load 事件中添加以下代码:SetWindowLong Text.hWnd,-4,Addressof newTxtFunc
    怎样就可以实现屏蔽文本框的右键菜单了。注:因为文本框不同与窗口,所以不需要将它的窗口程序还原。(还不给分?太不近人情了吧:(((
      

  6.   

    对不起,程序输错了。你还得声明一个全局变量用来保存文本框的原窗口程序。Public oldTxtFunc as long然后用 GetWindowlong 取得原窗口程序地址
    oldTxtFunc=getwindowlong(text.hwnd,-4) 将此语句放在窗体 Load 事件中,即在SetWindowLong Text.hWnd,-4,Addressof newTxtFunc 语句的前面然后把 newTxtFunc 过程中的 newTxtFunc=CallWindowProc(hWnd,Msg,wParam,lParam) 更改为:newTxtFunc=CallWindowProc(oldTxtFunc,hWnd,Msg,wParam,lParam)其他没什么问题了。
      

  7.   

    谢谢 PasswordError(对不起您的密码错误……) ,lingll(20分) 
    可以加我QQ:26885256 吗?向你们请教一下问题
    给分了!!!!!!!!!!!!!