またまた勉強させて下さい。宜しくお願いします
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実行時に
ポップアップメニューが消される現象が起きているのではと思っています
そこで質問なのですが、ツリービューのノードを右クリックして
「ブラウザを更新した後ポップアップを出したい」を
何らかの改訂や別なアプローチで実現できますでしょうか?
どうぞ宜しくお願い致します
すみません
環境を書き忘れました
vb6 + win2k sp4
です。宜しくお願いします
ううう・・
レスがつかなかったので
やむなく終了したく思います
>推測ですが、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
うちの環境では 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
ごめんなさい。コピペの段階でソース整理して失敗してました。
Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
'PopupMenu Menu(0), vbPopupMenuRightButton, , , menuSub(1)
mNavi = False
End Sub
にしておいて下さい。
うぉぉぉぉ!
まるろうさん、ありがとうございます
たった今レスを発見しました
ソース動かして見ます
何度も試して頂いて申し訳ないです
後で結果を書かせてもらいますので・・。
>まるろうさん
特攻隊長まるるうさん
名前を激しく間違えました
重ねてすみません ・・・orz
NavigateComplete2イベント発生後
さらにタイマーで遅延処理する流れですね
本番ソースに反映しても問題なく動作するようになりました
ものすごく勉強になりました。
ほんとに困ってたので助かりました
ありがとうございました
ツイート | ![]() |