C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: WebBrowserのheightの最大値


(過去ログ 23 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■9882 / inTopicNo.1)  WebBrowserのheightの最大値
  
□投稿者/ はる (8回)-(2007/11/06(Tue) 15:46:30)

分類:[VB.NET/VB2005] 

よろしくお願いします。

環境はVisual Studio2003 VB.NETです。
OSはWindowsXP Proです。

WebBrowserにテキストボックスで指定されたURLのページをフルスクリーンで表示しようと思っています。
つまり、ページのサイズに合わせてWebBrowserのサイズを変更し、スクロールバー無しでページ全体を表示するというものです。

そこで問題にぶつかってしまいました。
WebBrowser.heightが32767ピクセル以上に伸びてくれません。
表示したいURLの高さが40000を超えたページがあるのですが、それは表示不可能なのでしょうか?
WebBrowser.heightの限界という仕様なのか、他に手段があるのか、ご教授よろしくお願いします。
引用返信 編集キー/
■9887 / inTopicNo.2)  Re[1]: WebBrowserのheightの最大値
□投稿者/ Tom Yama (20回)-(2007/11/06(Tue) 16:44:09)
No9882 (はる さん) に返信
> よろしくお願いします。
>
> 環境はVisual Studio2003 VB.NETです。
> OSはWindowsXP Proです。
>
> WebBrowserにテキストボックスで指定されたURLのページをフルスクリーンで表示しようと思っています。
> つまり、ページのサイズに合わせてWebBrowserのサイズを変更し、スクロールバー無しでページ全体を表示するというものです。
>
> そこで問題にぶつかってしまいました。
> WebBrowser.heightが32767ピクセル以上に伸びてくれません。
> 表示したいURLの高さが40000を超えたページがあるのですが、それは表示不可能なのでしょうか?
> WebBrowser.heightの限界という仕様なのか、他に手段があるのか、ご教授よろしくお願いします。
「40000を超えたページ」を、スクロールなしで表示できる、スクリーンをお持ちなのですか?
引用返信 編集キー/
■9891 / inTopicNo.3)  Re[2]: WebBrowserのheightの最大値
□投稿者/ はる (9回)-(2007/11/06(Tue) 17:23:19)
No9887 (Tom Yama さん) に返信

お返事ありがとうございます。

> 「40000を超えたページ」を、スクロールなしで表示できる、スクリーンをお持ちなのですか?
説明不足で申し訳ありません。

フルスクリーンで表示したWebBrowserそのものを閲覧する訳ではなく、そこで表示された内容の画像をキャプチャしたいと思っています。
簡単に言ってしまうと、ホームページの全表示スクリーンショットを取る機能を作っています。
一度、WebBrowserに対象の領域を全表示しないといけないと思っています。
引用返信 編集キー/
■9895 / inTopicNo.4)  Re[3]: WebBrowserのheightの最大値
□投稿者/ 渋木宏明(ひどり) (515回)-(2007/11/06(Tue) 19:07:49)
渋木宏明(ひどり) さんの Web サイト
> 一度、WebBrowserに対象の領域を全表示しないといけないと思っています。

OleDraw() API を使えば、表示領域に収まらないトコもビットマップに書き込めたはずです。

引用返信 編集キー/
■9906 / inTopicNo.5)  Re[4]: WebBrowserのheightの最大値
□投稿者/ mあ@反省中 (11回)-(2007/11/07(Wed) 01:01:55)
No9895 (渋木宏明(ひどり) さん) に返信
>>一度、WebBrowserに対象の領域を全表示しないといけないと思っています。
>
> OleDraw() API を使えば、表示領域に収まらないトコもビットマップに書き込めたはずです。
>

ただキャプるだけならキャプラーでVectorへGo

引用返信 編集キー/
■9910 / inTopicNo.6)  Re[5]: WebBrowserのheightの最大値
□投稿者/ 渋木宏明(ひどり) (516回)-(2007/11/07(Wed) 03:16:37)
渋木宏明(ひどり) さんの Web サイト
> ただキャプるだけならキャプラーでVectorへGo

表示してない領域もキャプチャ出来るんです?

引用返信 編集キー/
■9913 / inTopicNo.7)  Re[6]: WebBrowserのheightの最大値
□投稿者/ はる (10回)-(2007/11/07(Wed) 10:17:50)
■ (渋木宏明(ひどり) さん) /mあ@反省中 に返信

返事遅くなってすいません!

渋木宏明(ひどり) さん
> OleDraw() API を使えば、表示領域に収まらないトコもビットマップに書き込めたはずです。

すいません、OleDrawを使っているのですが、WebBrowserで表示してから使っています。
使い方が間違っているのでしょうか?
使い方は下記の通りです。wbがWebBrowserのコントロールです。

doc2 = CType(wb.Document, mshtml.IHTMLDocument2)
doc2.body.style.overflow = "visible"
doc2.body.style.borderStyle = "none"
doc2.body.parentElement.style.overflow = "visible"
doc2.body.parentElement.style.borderStyle = "none"
element2 = CType(doc2.body, mshtml.IHTMLElement2)

bmp_page = New Bitmap(wb.Width, wb.Height)
Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(wb.GetOcx())
g = Graphics.FromImage(bmp_page)
Dim hdc As IntPtr = g.GetHdc
OleDraw(pUnk, DVASPECT.DVASPECT_CONTENT, hdc, New Rectangle(0, 0, element2.scrollWidth, element2.scrollHeight))

pb.Width = element2.scrollWidth
pb.Height = element2.scrollHeight
pb.Image = bmp_page

Marshal.Release(pUnk)
g.ReleaseHdc(hdc)


mあ@反省中 さん
>ただキャプるだけならキャプラーでVectorへGo
そうなんですよねぇ、フリーのソフトはいくつか見かけたんですが…
ただ今回は、できれば自分で開発したいと思いまして…
引用返信 編集キー/
■9923 / inTopicNo.8)  Re[7]: WebBrowserのheightの最大値
□投稿者/ 渋木宏明(ひどり) (517回)-(2007/11/07(Wed) 13:24:07)
渋木宏明(ひどり) さんの Web サイト
> bmp_page = New Bitmap(wb.Width, wb.Height)

ブラウザコントロールの表示サイズで Bitmap を作ってるんだから、ブラウザコントロールの表示サイズ分しか描画できないのは道理かと。

引用返信 編集キー/
■9927 / inTopicNo.9)  Re[8]: WebBrowserのheightの最大値
□投稿者/ はる (11回)-(2007/11/07(Wed) 16:35:58)
No9923 (渋木宏明(ひどり) さん) に返信
>> bmp_page = New Bitmap(wb.Width, wb.Height)

渋木宏明(ひどり) さん こんにちは。
お返事ありがとうございます。
> ブラウザコントロールの表示サイズで Bitmap を作ってるんだから、ブラウザコントロールの表示サイズ分しか描画できないのは道理かと。
ウェブページの内容をWEBBROWSERに表示する段階で表示しきれていないので、その後のBitmapを作成する作業には関係ないと思っていたのですがそういう訳ではないのでしょうか?
引用返信 編集キー/
■9932 / inTopicNo.10)  Re[9]: WebBrowserのheightの最大値
□投稿者/ はる (12回)-(2007/11/07(Wed) 16:55:53)
No9923 (渋木宏明(ひどり) さん) に返信
すいません、なんか肝心のソースが抜けてるのに気付かなくて間抜けな質問をしてしまいました。

【処理】
(ここで既にウェブページをWebBrowserに表示する処理を行っています。)
doc2 = CType(wb.Document, mshtml.IHTMLDocument2)
doc2.body.style.overflow = "visible"
doc2.body.style.borderStyle = "none"
doc2.body.parentElement.style.overflow = "visible"
doc2.body.parentElement.style.borderStyle = "none"
element2 = CType(doc2.body, mshtml.IHTMLElement2)

(ここでelement2でウェブページの長さを取得し、WebBrowserの長さを調節する処理がある) ←ここで長さが足りなくなる問題発生

bmp_page = New Bitmap(wb.Width, wb.Height)
Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(wb.GetOcx())
g = Graphics.FromImage(bmp_page)
Dim hdc As IntPtr = g.GetHdc
OleDraw(pUnk, DVASPECT.DVASPECT_CONTENT, hdc, New Rectangle(0, 0, element2.scrollWidth, element2.scrollHeight))

pb.Width = element2.scrollWidth
pb.Height = element2.scrollHeight
pb.Image = bmp_page

Marshal.Release(pUnk)
g.ReleaseHdc(hdc)

という処理になっています。
ちょっと焦っていたものですいません。
引用返信 編集キー/
■9934 / inTopicNo.11)  Re[10]: WebBrowserのheightの最大値
□投稿者/ Ruku (4回)-(2007/11/07(Wed) 17:29:43)
> (ここでelement2でウェブページの長さを取得し、WebBrowserの長さを調節する処理がある) ←ここで長さが足りなくなる問題発生

の部分で、

> WebBrowser.heightが32767ピクセル以上に伸びてくれません。

になるので、

> bmp_page = New Bitmap(wb.Width, wb.Height)

これでは Bitmap オブジェクトの高さが「32767 ピクセル以上に伸びてくれません」のサイズになってしまうのでは。
と、思ったんですが。違いますかね?

bmp_page = New Bitmap(wb.Width, 実際に必要な高さ);
にしたらどうでしょうか。(試してませんが...)
引用返信 編集キー/
■9938 / inTopicNo.12)  Re[11]: WebBrowserのheightの最大値
□投稿者/ はる (13回)-(2007/11/07(Wed) 19:03:14)
No9934 (Ruku さん) に返信

Rukuさん、お返事有難うございます。
>>bmp_page = New Bitmap(wb.Width, wb.Height)
>
> これでは Bitmap オブジェクトの高さが「32767 ピクセル以上に伸びてくれません」のサイズになってしまうのでは。
> と、思ったんですが。違いますかね?
>
> bmp_page = New Bitmap(wb.Width, 実際に必要な高さ);
> にしたらどうでしょうか。(試してませんが...)

う〜ん、高さをelement2で合わせてみたんですけど、新たな問題が…
画像として書き出す処理の手前で、ピクチャボックスに一度表示するんですが、
今度はピクチャボックスに画像がおさまらなくなってしまいました…
g2.DrawImage(pb.Image, 0, 0, int_w, int_h)

調べてみるとどうやらWindowsの仕様のようですね…
コントロールの長さが限界っぽいです…
諦めるしかないですかねぇ…
引用返信 編集キー/
■9940 / inTopicNo.13)  Re[12]: WebBrowserのheightの最大値
□投稿者/ Ruku (5回)-(2007/11/07(Wed) 20:10:29)
> う〜ん、高さをelement2で合わせてみたんですけど、新たな問題が…

Bitmap オブジェクトへの描画には成功したんでしょうか?

それはそれとして、
> 画像として書き出す処理の手前で、ピクチャボックスに一度表示するんですが、
> 今度はピクチャボックスに画像がおさまらなくなってしまいました…
> g2.DrawImage(pb.Image, 0, 0, int_w, int_h)

これ、全部まとめて表示する必要はあるのでしょうか。
Tom Yama さんの言葉を借りると「40000 を超えたページを、スクロールなしで表示できる、スクリーンをお持ちなのですか?」
ということになりそうですが。

いや、たぶん ScrollBar で処理しているのだと思いますが、VScrollBar を配置して Scroll イベント中に自分で処理すれば何とか…

# 勝手に、PictureBox を Panel あたりに入れてスクロール処理させてるんだろうなーと予想して書いてます。
# 違っていたら済みません、無視していただいて構いません。
# そのあたりの情報があれば多少はマシなアドバイスもできるやも…
引用返信 編集キー/
■9947 / inTopicNo.14)  Re[13]: WebBrowserのheightの最大値
□投稿者/ カンタービレ (18回)-(2007/11/07(Wed) 21:10:06)
全く見当はずれの横ヤリかも知れませんが・・。

【WEBページをPDFや画像にする】
http://www.itmedia.co.jp/bizid/articles/0610/13/news074.html
http://gigazine.net/index.php?/news/comments/20071107_virtual_image_printer_driver/

こんなツールを利用できればプリンタの選択してプリントメソッド呼び出しで
あ〜楽チン♪なんてことないでしょうか。。
ご自身で実装されたい!という要望に水を差すようで気が引けましたが
プリンタドライバ経由というのもアプローチとしてはアリかと思いましたので・・。
引用返信 編集キー/
■9951 / inTopicNo.15)  Re[6]: WebBrowserのheightの最大値
□投稿者/ mあ@反省中 (13回)-(2007/11/07(Wed) 21:49:03)
No9910 (渋木宏明(ひどり) さん) に返信
>>ただキャプるだけならキャプラーでVectorへGo
>
> 表示してない領域もキャプチャ出来るんです?
>

自動スクロールさせてキャプれますよ。
操作手順的には、
(1)キャプラ起動
(2)ブラウザ起動&表示、先頭部分を表示させる。
(3)キャプラの設定でオートスクロール=ON、スクロールスピード設定、スクロールバーをクリッピング=ON
(4)キャプラの専用アイコンをキャプりたいWindowにドラッグ&ドロップ。



こんだけです。

引用返信 編集キー/
■9961 / inTopicNo.16)  Re[7]: WebBrowserのheightの最大値
□投稿者/ 渋木宏明(ひどり) (520回)-(2007/11/08(Thu) 02:28:31)
渋木宏明(ひどり) さんの Web サイト
> 自動スクロールさせてキャプれますよ。

なるほどー

> (3)キャプラの設定でオートスクロール=ON、スクロールスピード設定、スクロールバーをクリッピング=ON

この辺にちょっとコツがいりそうですね。

あと、縦方向だけでなく横方向のスクロールが必要な場合なんかは苦労しそう。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -