WebBrowserの右クリックメニューをカスタマイズするには?


Ben  2008-09-12 00:33:52  No: 140405

現在VB6.0で開発しています。

WebBrowserを右クリックすると表示されるメニューをカスタマイズする
ことは可能なのでしょうか。実際に使用したいメニューは「コピー」だけで
「印刷」は表示させないようにしたいのです。

「WBCustomizer.dll」を使用したらできるのではないかと思い、
下記のソースコードを実行してみましたが右クリックメニューが
表示されなくなり、文字選択もできなくなってしまい、やりたいこと
ができませんでした。

dim obj As WBCustomizer
Set obj = New WBCustomizer
With obj
    .EnableContextMenus = False
    .EnableAllAccelerators = False
    Set .WebBrowser = brwReport
End With

メニューをカスタマイズは無理なのでしょうか。
経験のある方がおられたら、よろしくお願い致します。


魔界の仮面弁士  2008-09-12 01:54:53  No: 140406

IDocHostUIHandler インターフェイスの ShowContextMenu メソッドを
実装する事になるかと思います。なので VB6 ではなく、
WBCustomizer.dll 側で実装した方が良いかと思いますよ。

無修正の WBCustomizer.dll のままなら、DirectInput でマウスを追跡し、
右クリック時に VB6 の PopupMenu メソッドを呼ぶようにするとか。


Ben  2008-09-12 03:04:17  No: 140407

返信有難うございます。

無修正の WBCustomizer.dll で実装したいので、
過去LOGで、魔界の仮面弁士さんが書いたDirectInputのサンプルを
見つけて早速テストプログラムを作成してみました。
DIMOFS_BUTTON1が右クリックのようだったのでメニューを出すことは
できました。

ただ、下記のコードを残している為、WebBrowserの文字をマウスで
選択することができないのです。教えて頂いて、あと少しでという
ところなのにとても悔しくてなりません。何か策はありますでしょうか。

dim obj As WBCustomizer
Set obj = New WBCustomizer
With obj
    .EnableContextMenus = False
    .EnableAllAccelerators = False
    Set .WebBrowser = brwReport
End With

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


魔界の仮面弁士  2008-09-12 05:44:06  No: 140408

であれば、こうかな。

'---------
Option Explicit

Implements IDocHostUIHandler
Private CustomDoc As ICustomDoc

Private Sub Form_Load()
    WebBrowser1.Navigate2 "http://www.google.co.jp/"
    Do
        DoEvents
        Set CustomDoc = WebBrowser1.Document
    Loop While CustomDoc Is Nothing
    CustomDoc.SetUIHandler Me
End Sub
Private Sub IDocHostUIHandler_ShowContextMenu( _
    ByVal dwContext As ContextMenuTarget, _
    ByRef pPOINT As olelib.POINT, _
    ByVal pCommandTarget As IOleCommandTarget, _
    ByVal HTMLTagElement As Object)

    Debug.Print HTMLTagElement.tagName, "("; pPOINT.x; ","; pPOINT.y; ")", dwContext
    Me.PopupMenu Me.mnuSample
End Sub

'以下、IDocHostUIHandler メンバに対する空っぽのプロシージャ実装
Private Sub IDocHostUIHandler_EnableModeless(ByVal fEnable As BOOL)
End Sub
Private Function IDocHostUIHandler_FilterDataObject(ByVal pDO As IDataObject) As IDataObject
End Function
'--以下略---

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200311/03110001.txt


Ben  2008-09-12 22:05:56  No: 140409

ソースまで書いて頂き有難うございます。

試してみます。ちょっと時間がないためまた報告致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加