ポップアップメニューを出さないようにするには?


bell  2000-10-24 22:33:01  No: 103501  IP: [192.*.*.*]

コンテナに貼り付けたテキストボックスにて
右クリックを行うと、ポップアップメニュー(コンテキストメニュー)が
表示されますが、表示させたくない場合にはどうすれば良いのでしょうか?
(メニューエディタにて作成していないのに表示されてしまいます。)

テキストボックスのプロパティを見てみたのですが、
それらしい物も見あたらりません。


よろしくお願いいたします。

編集    削除
PAPY  2000-10-25 23:31:21  No: 103502  IP: [192.*.*.*]

こんな感じにすればできますよ。
※もし、あなたが初心者ならば理解するのにはちょっと難しいかもしれません。

※間違えて、変なことをコードを書いてしまうとちょっと危ないので
ソースコードも送ります。(これと同じ)

※尚、AddressOf演算子を使用しているのでVB5.0以上でないと動作致しません。

■操作内容
  
メッセージをフックする(WM_RBUTTONDOWNメッセージを横流ししない)

■使用するコンポーネント
    
  テキストボックス(Text1)  

■Formの処理

Private Sub Form_Load()
 'Widowsメッセージをフックします
  Address = SetWindowLong(Text1.hWnd, GWL_WNDPROC,AddressOf MsgProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
  '終了処理
  Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, Address)
End Sub


■標準モジュール

'☆注意事項☆
'(1)絶対にデバックの「ステップイン、ステップオーバー」等で、実行しないでください。
'(2)絶対に「■」ボタンで終了しないでください。
'   (1)と(2) >>>最悪の場合、Windowsが起動しなくなる可能性があります。

'-------------------------------------
'ウインドウに関する情報を設定するAPI関数
'-------------------------------------
 'hWnd:ウインドウのハンドル
 'nIndex:定数(GWL_××参照)
 'dwNewLong:設定する32ビット値
 
 '戻り値:直前のウインドウプロシージャのアドレス

Public Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'---------------------------------------------
'Windowsメッセージをウインドウプロシージャに渡す
'---------------------------------------------
 
 'lpPrevWndFunc:ウインドウ関数へのポインタ
 'hWnd:ウインドウのハンドル
 'Msg:メッセージ
 'wParam:パラメータ
 'lParam:パラメータ


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 WM_RBUTTONDOWN = &H204 'マウス右ボタンを押した
Public Const GWL_WNDPROC = (-4)     'ウインドウ関数

'-----
'変数
'-----
Public Address As Long              'ウインドウプロシージャのアドレス

'---------------------------------------------------------
'■関数名  MsgProc
'■用途    マウス右クリックを押した時なにもしない
'■引数    nHandle: ウインドウのハンドル
'          nMsg:   Windowsのメッセージ
'          wParam: メニューID
'          lParam:  パラメータ
'----------------------------------------------------------
Public Function MsgProc(ByVal nHandle As Long, ByVal nMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
    'マウス右クリックを押した時
    If nMsg = WM_RBUTTONDOWN Then
      Exit Function
    End If
  
  MsgProc = CallWindowProc(Address, nHandle, nMsg, wParam, lParam)

End Function

編集    削除
たかみちえ  URL  2001-03-30 23:24:59  No: 103503  IP: [192.*.*.*]

MicroSoft社でも言ってますけど、
これにはもっと簡単な方法があります。
テキストボックス.Enabled=False
テキストボックス.Enabled=True
または、KeyPreviewプロパティをオンにして
MouseDownイベントに、Exit Sub をつけるとか。
Button = 0も有効かもしれないです。

  自作のポップアップメニューを作るときも、
一旦テキストボックスを使用不可にしないと、
もともとポップアップメニューがあるところでは、うまく機能しません。

編集    削除
たかみちえ  URL  2001-03-30 23:27:04  No: 103504  IP: [192.*.*.*]

あ、そうそう、
テキストボックスの場合、
SelLengthとかを記憶しておいたほうがいいですね、
それと、KeyPreviewはきかないかも…。

編集    削除