電子書籍の厳選無料作品が豊富!

テキストボックスで右クリックしたらコンテキストメニューがでますがこれをでなくしたいのですがどうしたらできますか?
過去ログは全部見たのですがどうもしっくり来なかったので質問させていただきました。m( _ _ )m よろしくお願いします。

A 回答 (3件)

 


#1さんご提示の通り、サブクラス化を使います。
ちょっとむずかしいですが、サンプルコードを提示しておきます。

※ タグが使えませんのでインデントが潰れています。読みにくいと思いますが、気合で読んでください。(^-^;

※ マルチインスタンスには対応していません。複数のコントロールをサブクラス化する場合、コンポーネント化する場合は変更が必要です。

Option Explicit

'API関数の宣言
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public 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 Const GWL_WNDPROC = (-4)
Public Const WM_CONTEXTMENU = &H7B 'ショートカットメニュー
Public Const WM_COPY = &H301 'コピー
Public Const WM_CUT = &H300 '切り取り
Public Const WM_PASTE = &H302 '張り付け
Public Const WM_RBUTTONUP = &H205 '右ボタンUp

Public ghWnd As Long

Public Sub Hook(hwnd As Long)
'テキストボックスのサブクラス化。
ghWnd = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
End Sub

Public Sub UnHook(hwnd As Long)
'サブクラス化解除。
Dim lngret As Long
If ghWnd <> 0 Then
lngret = SetWindowLong(hwnd, GWL_WNDPROC, ghWnd)
End If
End Sub

Public Function WndProc(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
'メッセージフック。
Select Case uMsg
Case WM_CONTEXTMENU 'ショートカットメニューの無効化。
Case WM_CUT, WM_PASTE, WM_RBUTTONUP 'カット & ペースト、右クリックの無効化。
'特定のコントロールの場合のみメッセージをフック。
If Screen.ActiveControl.Name <> "txtFoo" Then
WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam)
End If
Case Else
WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam)
End Select
End Function

'↓以下、フォームモジュール。
Private Sub Form_Load()
'テキストボックスをサブクラス化。
Call Hook(Me.txtHoge.hwnd)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'サブクラス化解除。
Call UnHook(Me.txtHoge.hwnd)
End Sub
    • good
    • 0

 


#2 の続きです。

サブクラス化に自信がなければ、ダミーのコンテキストメニューを割り当てるという方法もあります。言うまでもなく、こちらの方がずっと容易です。
 

この回答への補足

ダミーのコンテキストメニューを割り当てるというのはNO.1のかたがおしえてくれてURLに載っているようなことのことでしょうか?

補足日時:2003/01/13 08:11
    • good
    • 0
この回答へのお礼

わざわざコードを書いてくれてありがとうございます!!サブクラス化をがんばってやってみようと思います。

お礼日時:2003/01/13 08:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!