タイトル : Re^3: WebBrowserのスクロール制御 投稿日 : 2017/03/23(Thu) 13:01 投稿者 : 魔界の仮面弁士
>>> .Document.Body.ScrollLeft と ScrollTop で制御できそうなのですが、 > HPがフレームに分かれていることに原因がありそうです。 フレームページの Document ではなく、 親ページの Document を操作していませんか? Imports System.Windows.Forms Public Class Form1 Private WithEvents menuFrame As HtmlWindow Private WithEvents topFrame As HtmlWindow Private Const SampleUrl As String = "http://hanatyan.sakura.ne.jp/vbhlp/index.html" Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load Me.WebBrowser1.Navigate(SampleUrl) End Sub Private cnt As Integer = 0 Private Sub WebBrowser1_DocumentCompleted( _ ByVal sender As Object, _ ByVal e As WebBrowserDocumentCompletedEventArgs _ ) Handles WebBrowser1.DocumentCompleted '今回の URL このイベントは、3回発生します。 '最初の2回は、フレームから呼ばれた menu.htm と top.htm のもので、 '最後の3回目が、親ページとなる index.html のものです。 Debug.WriteLine(e.Url) cnt += 1 If cnt = 3 Then Dim frames As HtmlWindowCollection = Me.WebBrowser1.Document.Window.Frames menuFrame = frames(0) topFrame = frames(1) Timer1.Interval = 55 Timer2.Interval = 100 Timer1.Start() Timer2.Start() End If End Sub Private offset1 As Integer = 4 Private preTop1 As Integer = 0 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick menuFrame.Document.Body.ScrollTop += offset1 If menuFrame.Document.Body.ScrollTop = preTop1 Then offset1 *= -1 End If preTop1 = menuFrame.Document.Body.ScrollTop End Sub Private offset2 As Integer = 7 Private preTop2 As Integer = 0 Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer2.Tick topFrame.Document.Body.ScrollTop += offset2 If topFrame.Document.Body.ScrollTop = preTop2 Then offset2 *= -1 End If preTop2 = topFrame.Document.Body.ScrollTop End Sub End Class --- 以下蛇足 --- > Private Const SampleUrl As String = "http://hanatyan.sakura.ne.jp/vbhlp/index.html" 上記のページでは、HTML ページの冒頭に <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> が指定されていますが、システム識別子は省略するものでは無いので <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> が適切な宣言です。また、<FRAMESET> を使うのであれば、Transitional な DTD は使えないので <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> の文書型で宣言されるべきかと思います。>管理人さん 一方、<NOFRAMES> 要素については、HTML 4.01 Frameset でも HTML 4.01 Transitional でも使えます。(使い方は異なりますが) HTML 4.01 Transitional → <NOFRAMES>の直下に<BODY>を書いてはならない。<BODY>の下に<NOFRAMES>を書くことはできる。 HTML 4.01 Frameset → <NOFRAMES>の直下に<BODY>が必ず必要。<BODY>の子孫に<NOFRAMES>を含めてはいけない。 |