タイトル | : フレームありのWebページの全体の大きさの取得 |
記事No | : 2648 |
投稿日 | : 2005/11/26(Sat) 11:38 |
投稿者 | : YAS |
[OSのVer]:Windows [VBのVer]:VB.NET2005β2 いつも大変お世話になります。 Webページを見たままに印刷,また,Webページのサムネイル化を 目的にWebページをビットマップで保存したいと考えています。 いくつかのフリーソフトがあることは存じておりますが,事情が あり自作したいのです。 以下のコードでフレームなしのWebページではページ全体の画像化 ができました。しかしフレームありの場合には ページの右端・下端までの長さがわからない という問題があり,ページ全体を取得することができません。
ページ全体の長さを求めるために,具体的には Me.WebBrowser1.Document.Window.Frames(i).Document.Body.ScrollRectangle.Height で各フレームの高さを求めその上下左右の関係から長さを足して 全体の長さを求めようと考えました。 しかし,ScrollRectangeleはページによっては変な値を返すことがあり,また, Me.WebBrowser1.Document.GetElementsByTagName("frame")(i).ClientRectangle.Top または Me.WebBrowser1.Document.Window.Frames(i).Document.Body.ClientRectangle.Top の値がどのフレームでも0なので各フレームの上下左右関係がわかりません。 MshtmlのDomから相当するメソッドを実行しても同じでした。
まとめますと, 「フレームありのWebページでページ全体をスクロールしなくても見る ことができるウィンドウの大きさ」を求めるために, 「各フレームのウェブブラウザ内の左上の座標と,各フレームのスク ロールしなくても見ることができる大きさ」を求める方法が知りたいです。
よろしくご教授をお願いいたします。
Imports System.Runtime.InteropServices
Public Class form1
Const DVASPECT_CONTENT As Integer = 1
<DllImport("ole32.dll")> _ Public Shared Function OleDraw( _ ByVal pUnk As IntPtr, _ ByVal dwAspect As Integer, _ ByVal hdcDraw As IntPtr, _ ByRef lprcBounds As Rectangle) _ As Integer End Function
Dim WithEvents WebBrowser1 As WebBrowser Dim PictureBox1 As PictureBox
Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.WebBrowser1 = New WebBrowser Me.Controls.Add(WebBrowser1) 'フォームに追加しないと保護エラーになる Me.WebBrowser1.Visible = False Me.PictureBox1 = New PictureBox Me.Controls.Add(Me.PictureBox1) Me.PictureBox1.Dock = DockStyle.Fill Me.WebBrowser1.Navigate("hhttp://www.yahoo.co.jp") End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted If Me.WebBrowser1.Url.ToString = e.Url.ToString Then Me.WebBrowser1.Document.Body.Style = "overflow-x:hidden;overflow-y:hidden" 'スクロールバーを消す(ScrollBarsEnabled=Falseでは消えない) Dim Rect As Rectangle = Me.WebBrowser1.Document.Body.ScrollRectangle Dim BodySize As New Size(Rect.Width, Rect.Height) Me.Size = BodySize Me.WebBrowser1.Size = BodySize Me.PictureBox1.Size = BodySize Me.PictureBox1.Image = New Bitmap(BodySize.Width, BodySize.Height) Dim Graph As Graphics = Graphics.FromImage(Me.PictureBox1.Image) 'こうしないと後で画像が消える Dim Browser As Object = Me.WebBrowser1.ActiveXInstance Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(Browser) Dim hDc As IntPtr = Graph.GetHdc OleDraw(pUnk, DVASPECT_CONTENT, hDc, Me.PictureBox1.ClientRectangle) Marshal.Release(pUnk) Graph.ReleaseHdc(hDc) Me.Refresh() End If End Sub End Class
|