ブラウザを更新しつつポップアップメニューを出すには?

解決


nori  2004-11-20 12:49:34  No: 117698

またまた勉強させて下さい。宜しくお願いします

WebBrowser、ツリービュー、メニュー
のコントロールを使って画面を作っています。
以下はサンプルソースです
メニューはmenu をインデックス0として、
その子としてmenuSubをインデックス1として配置してます

Private Sub Form_Load()
  Dim nodex As Object
  'ツリーノード構築
  Set nodex = TreeView1.Nodes.Add(, , "Root", "Root")
  Set nodex = TreeView1.Nodes.Add("Root", 1, "child", "child")
  'ブラウザ初期化
  WebBrowser1.Navigate2 "about:blank"
End Sub

Private Sub TreeView1_MouseUp(Button As Integer, _
  Shift As Integer, x As Single, y As Single)
  '右クリックでポップアップメニュー
  If Button = vbRightButton Then
    PopupMenu menu(0), vbPopupMenuRightButton, , , menuSub(1)
  End If
End Sub

Private Sub menuSub_Click(Index As Integer)
    MsgBox "menu実行"
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
  'ノードによりブラウザでURL分岐
  If TreeView1.SelectedItem.Key = "Root" Then
    WebBrowser1.Navigate2 "http://google.co.jp"
  Else
    WebBrowser1.Navigate2 "http://yahoo.co.jp"
  End If
End Sub

で、これを実行してツリーのノードを右クリックすると
MouseUpイベントと、NodeClickイベントが走ります
やりたいことはブラウザを更新しつつポップアップを
出したいのですが、
MouseUp時に書いた処理のポップアップメニューがでません
(ブラウザ更新の処理をコメントにするとポップアップでます)

推測ですが、IEなどのブラウザで右クリックでメニュー出したまま
リロードすることはできないので、Navigate2実行時に
ポップアップメニューが消される現象が起きているのではと思っています

そこで質問なのですが、ツリービューのノードを右クリックして
「ブラウザを更新した後ポップアップを出したい」を
何らかの改訂や別なアプローチで実現できますでしょうか?
どうぞ宜しくお願い致します


nori  2004-11-20 12:54:05  No: 117699

すみません
環境を書き忘れました

vb6 + win2k sp4

です。宜しくお願いします


nori  2004-11-28 03:33:59  No: 117700

ううう・・
レスがつかなかったので
やむなく終了したく思います


特攻隊長まるるう  2004-11-30 02:55:27  No: 117701

>推測ですが、IEなどのブラウザで右クリックでメニュー出したまま
>リロードすることはできないので、Navigate2実行時に
>ポップアップメニューが消される現象が起きているのではと思っています
…だとしたら Navigate2 実行後にタイマーで表示…で一見上手く行くんだけど
重いページだと解決せず。どうも表示が完全に終了しないとダメ?

過去ログに『WebBrowserで読み込み完了まで待つには?』とかあるんで
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200312/03120063.txt
試したけど…全然ループに引っ掛からなくて断念。

[VB6.0]
Option Explicit

Private Sub Form_Load()
    Dim nodex As Object
    'ツリーノード構築
    Set nodex = TreeView1.Nodes.Add(, , "Root", "Root")
    Set nodex = TreeView1.Nodes.Add("Root", 1, "child", "child")
    'ブラウザ初期化
    WebBrowser1.Navigate2 "about:blank"
End Sub

Private Sub TreeView1_MouseUp(Button As Integer, _
    Shift As Integer, x As Single, y As Single)
    '右クリックでポップアップメニュー
    If Button = vbRightButton Then
        Me.Timer1.Interval = 1000 ' 十分な時間を取ってみて下さい。
    End If
End Sub

Private Sub menuSub_Click(Index As Integer)
    MsgBox "menu実行"
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    'ノードによりブラウザでURL分岐
    If TreeView1.SelectedItem.Key = "Root" Then
        WebBrowser1.Navigate2 "http://google.co.jp"
    Else
        WebBrowser1.Navigate2 "http://yahoo.co.jp"
    End If
End Sub

Private Sub Timer1_Timer()
    Me.Timer1.Interval = 0
    PopupMenu Menu(0), vbPopupMenuRightButton, , , menuSub(1)
End Sub


特攻隊長まるるう  2004-11-30 03:12:18  No: 117702

うちの環境では NavigateComplete2 イベント後で上手く行きました。
[VB6.0]
Option Explicit

Private mNavi As Boolean

Private Sub Form_Load()
    Dim nodex As Object
    'ツリーノード構築
    Set nodex = TreeView1.Nodes.Add(, , "Root", "Root")
    Set nodex = TreeView1.Nodes.Add("Root", 1, "child", "child")
    'ブラウザ初期化
    WebBrowser1.Navigate2 "about:blank"
End Sub

Private Sub TreeView1_MouseUp(Button As Integer, _
    Shift As Integer, x As Single, y As Single)
    '右クリックでポップアップメニュー
    If Button = vbRightButton Then
        Me.Timer1.Interval = 10
    End If
End Sub

Private Sub menuSub_Click(Index As Integer)
    MsgBox "menu実行"
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    mNavi = True
    'ノードによりブラウザでURL分岐
    If TreeView1.SelectedItem.Key = "Root" Then
        WebBrowser1.Navigate2 "http://google.co.jp"
    Else
        WebBrowser1.Navigate2 "http://yahoo.co.jp"
    End If
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    PopupMenu Menu(0), vbPopupMenuRightButton, , , menuSub(1)
    mNavi = False
End Sub

Private Sub Timer1_Timer()
    Me.Timer1.Interval = 0
    If mNavi Then
        Me.Timer1.Interval = 10
    Else
        PopupMenu Menu(0), vbPopupMenuRightButton, , , menuSub(1)
    End If
End Sub


特攻隊長まるるう  2004-11-30 03:16:48  No: 117703

ごめんなさい。コピペの段階でソース整理して失敗してました。
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    'PopupMenu Menu(0), vbPopupMenuRightButton, , , menuSub(1)
    mNavi = False
End Sub
にしておいて下さい。


nori  2004-11-30 21:59:18  No: 117704

うぉぉぉぉ!
まるろうさん、ありがとうございます
たった今レスを発見しました
ソース動かして見ます

何度も試して頂いて申し訳ないです
後で結果を書かせてもらいますので・・。


nori  2004-11-30 22:08:59  No: 117705

>まるろうさん
特攻隊長まるるうさん
名前を激しく間違えました
重ねてすみません  ・・・orz


nori  2004-11-30 22:38:17  No: 117706

NavigateComplete2イベント発生後
さらにタイマーで遅延処理する流れですね
本番ソースに反映しても問題なく動作するようになりました

ものすごく勉強になりました。
ほんとに困ってたので助かりました
ありがとうございました


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

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






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