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

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

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

Re[6]: vb.netでのWebBrowserの縮小表示について


(過去ログ 101 を表示中)

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

■60520 / inTopicNo.1)  vb.netでのWebBrowserの縮小表示について
  
□投稿者/ やんまー (42回)-(2011/07/06(Wed) 14:43:28)

分類:[VB.NET/VB2005 以降] 

恐れ入ります。

WebBrowserの縮小ができなくて困っています。アドバイスいただけないでしょうか・・・



WebbrowserあるいはIEで表示内容の拡大/縮小を行うには?
http://homepage1.nifty.com/MADIA/vb/vb_bbs/200703/200703_07030015.html


WebBrowser1.Document.body.runtimeStyle.Zoom = "50%"

↑これだ!と思ったのですが、
「'runtimeStyle' is not a member of 'System.Windows.Forms.HtmlElement'. (BC30456)」
となってしまいました。VBAじゃないとダメなんですね。。。


そこで、

WebBrowserコントロールのウェブ表示
http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/6545bb8b-02c5-443c-ba9b-b0d58955cab0

により
WebBrowser1.Document.body.Style.Zoom = "50%"
としたのですが、

「'Zoom' is not a member of 'String'. (BC30456)」

ということでダメでした。



さらにこちら

ウェブブラウザで表示したページを、拡大・縮小表示
http://bbs.wankuma.com/index.cgi?mode=al2&namber=40006&KLOG=69

の■40154 を参考に


Dim pvaIn As Object = 50 'パーセント。10〜1000 の範囲
Dim pvaOut As Object = Type.Missing ' 変更結果が返される
Dim OLECMDID_OPTICAL_ZOOM As SHDocVw.OLECMDID = DirectCast(63, SHDocVw.OLECMDID)
DirectCast(webBrowser1.ActiveXInstance, SHDocVw.IWebBrowser2).ExecWB(OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, pvaIn, pvaOut)


としたのですが、
「Type 'SHDocVw.OLECMDID' is not defined. (BC30002) 」

となってしまいました・・・

参照でshdocvw.dllも追加したのですが・・・

もしかしたらvisualStudioではないからとも思ったのですが(Sharpdevelopを使ってます)
そんなハズはないとも思っています。

引用返信 編集キー/
■60522 / inTopicNo.2)  Re[1]: vb.netでのWebBrowserの縮小表示について
□投稿者/ ユーヴェー (1回)-(2011/07/06(Wed) 15:18:47)
No60520 (やんまー さん) に返信

> WebBrowser1.Document.body.Style.Zoom = "50%"

WebBrowser1.Document.body.Style = "Zoom:50%"
ではどうでしょう。
(ただし、bodyタグのstyle属性に他に何か設定しているようであれば、それは考慮する必要があります。)
引用返信 編集キー/
■60523 / inTopicNo.3)  Re[2]: vb.netでのWebBrowserの縮小表示について
□投稿者/ todo (155回)-(2011/07/06(Wed) 15:49:24)
VB流の遅延バインディングで

Me.WebBrowser1.ActiveXInstance.Document.body.Style.Zoom = "50%"
引用返信 編集キー/
■60526 / inTopicNo.4)  Re[1]: vb.netでのWebBrowserの縮小表示について
□投稿者/ 魔界の仮面弁士 (2238回)-(2011/07/06(Wed) 16:56:45)
No60520 (やんまー さん) に返信
> WebBrowserの縮小ができなくて困っています。アドバイスいただけないでしょうか・・・
WebBrowser には
 (1) ActiveX 版 WebBrowser コントロール
 (2) System.Windows.Forms.WebBrowser クラス
 (3) System.Windows.Controls.WebBrowser クラス
があります。

参考にされていたコードは(1)用の物だと思いますが、
やんまーさんが使っているのは(2)では無いでしょうか?


> 「'runtimeStyle' is not a member of 'System.Windows.Forms.HtmlElement'. (BC30456)」
VB.NET から マネージWebBrowser を使っている場合は、
 WebBrowser1.Document.Body.DomElement.runtimeStyle.zoom = "50%"
のように、DomElement プロパティを使って COM オブジェクトを得ることができます。

> となってしまいました。VBAじゃないとダメなんですね。。。
VBA かどうかではなく、ActiveX(COM)版のオブジェクトであるかどうかです。

もしも VB.NET や VBA から ActiveX 版 WebBrowser を使っている場合には
 WebBrowser1.Document.body.runtimeStyle.zoom = "50%"
のように書けます。今回使っているのは ActiveX 版ではありませんけれどね。


> Dim pvaIn As Object = 50 'パーセント。10〜1000 の範囲
> Dim pvaOut As Object = Type.Missing ' 変更結果が返される
> Dim OLECMDID_OPTICAL_ZOOM As SHDocVw.OLECMDID = DirectCast(63, SHDocVw.OLECMDID)
> DirectCast(webBrowser1.ActiveXInstance, SHDocVw.IWebBrowser2).ExecWB(OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, pvaIn, pvaOut)
OLECMDID_OPTICAL_ZOOM が使えるのは IE7 以降ですが、その点は大丈夫でしょうか。
http://msdn.microsoft.com/en-us/library/ms691264.aspx

OLECMDID_OPTICAL_ZOOM ( = 63 ) は IE7 以降が必要ですが、
OLECMDID_ZOOM ( = 19 ) の場合は、それ以前のバージョンでも使えます。
拡大縮小ではなく、文字サイズの変更という意味になってしまいますし、
1〜5の段階しか設定できませんけれどね。


> としたのですが、
> 「Type 'SHDocVw.OLECMDID' is not defined. (BC30002) 」
> となってしまいました・・・
とりあえず、
 DirectCast(WebBrowser1.ActiveXInstance, SHDocVw.IWebBrowser2).ExecWB(63, 0, pvaIn)
でも一応動作します。OLECMDID は単なる列挙体なので、値さえ正しければ Integer で代用できます。
http://www.icsharpcode.net/CodeReader/SharpDevelop/085/GuiBrowserSHDocVw.cs.html



> 参照でshdocvw.dllも追加したのですが・・・
とりあえず、
 Dim a As SHDocVw.IWebBrowser2
 Dim b As SHDocVw.OLECMDID
というコードはコンパイルが通りますか?
通らないのであれば、OLECMDID 等が ShDocVW.dll 以外のライブラリに含まれているのかも知れません。
(OS /IE によって、タイプライブラリのファイル名が微妙に異なっているため)


> もしかしたらvisualStudioではないからとも思ったのですが(Sharpdevelopを使ってます)
> そんなハズはないとも思っています。
SharpDevelop はアンインストールしてしまったので、私は検証できません…。

引用返信 編集キー/
■60548 / inTopicNo.5)  Re[2]: vb.netでのWebBrowserの縮小表示について
□投稿者/ やんまー (43回)-(2011/07/07(Thu) 21:38:44)
ユーヴェー さん

ありがとうございます!


webBrowser1.Navigate(url)
WebBrowser1.Document.body.Style = "Zoom:50%"

とやりましたら、コンパイルは通ったのですが、エラーになりました。URLはamazonです。
完全に表示されたあとじゃないとダメということでしょうか・・・


System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。




>>WebBrowser1.Document.body.Style.Zoom = "50%"
>
> WebBrowser1.Document.body.Style = "Zoom:50%"
> ではどうでしょう。
> (ただし、bodyタグのstyle属性に他に何か設定しているようであれば、それは考慮する必要があります。)
引用返信 編集キー/
■60549 / inTopicNo.6)  Re[3]: vb.netでのWebBrowserの縮小表示について
□投稿者/ やんまー (44回)-(2011/07/07(Thu) 21:41:22)
todo さん

ありがとうございます!

また違ったエラーになりました。。


System.NullReferenceException: オブジェクト変数または With ブロック変数が設定されていません。


No60523 (todo さん) に返信
> VB流の遅延バインディングで
>
> Me.WebBrowser1.ActiveXInstance.Document.body.Style.Zoom = "50%"
引用返信 編集キー/
■60550 / inTopicNo.7)  Re[2]: vb.netでのWebBrowserの縮小表示について
□投稿者/ やんまー (45回)-(2011/07/07(Thu) 23:01:25)
魔界の仮面弁士 さん

ありがとうございます!

> やんまーさんが使っているのは(2)では無いでしょうか?

あ、そうです。。

>  WebBrowser1.Document.Body.DomElement.runtimeStyle.zoom = "50%"
> のように、DomElement プロパティを使って COM オブジェクトを得ることができます。

読み込んだあとに実行すれば、うまくいくことがわかりました。

> OLECMDID_OPTICAL_ZOOM が使えるのは IE7 以降ですが、その点は大丈夫でしょうか。

IE8がインストールされているのでいいかと思ったのですが、そう言うことではないのでしょうか・・


>  Dim a As SHDocVw.IWebBrowser2
>  Dim b As SHDocVw.OLECMDID
> というコードはコンパイルが通りますか?


ああ、、、ダメのようです。

解決されたファイルには、無効なイメージが含まれているか、メタデータが存在しないか、またはアクセスできません。ファイルまたはアセンブリ 'C:\WINDOWS\system32\shdocvw.dll'、またはその依存関係の 1 つが読み込めませんでした。モジュールはアセンブリ マニフェストを含んでいなければなりません。 (MSB3246)

型 'SHDocVw.IWebBrowser2' が定義されていません。 (BC30002)


型 'SHDocVw.OLECMDID' が定義されていません。 (BC30002)


引用返信 編集キー/
■60551 / inTopicNo.8)  Re[4]: vb.netでのWebBrowserの縮小表示について
□投稿者/ ユーヴェー (2回)-(2011/07/07(Thu) 23:01:42)
No60549 (やんまー さん) に返信

私の方法も、todoさんの方法も、WebBrowserのドキュメントにアクセスするので、
ロード終了してからでないとだめだと思います。
DocumentCompletedイベントを使うか、あるいは以下のようにしてドキュメントが読み込まれるのを待つかですね。

webBrowser1.Navigate(url)
System.Windows.Forms.Application.DoEvents()
Do While webBrowser1.ReadyState <> WebBrowserReadyState.Complete
System.Windows.Forms.Application.DoEvents()
Loop

ちなみに、私の方法では、先回の書き込みの通り、該当サイトのbodyタグのstyle属性に他に何か設定している場合は、
それは考慮する必要がありますが、todoさんの方法では、これを気にする必要はないかも?
引用返信 編集キー/
■60552 / inTopicNo.9)  Re[3]: vb.netでのWebBrowserの縮小表示について
□投稿者/ 魔界の仮面弁士 (2239回)-(2011/07/08(Fri) 01:44:52)
No60550 (やんまー さん) に返信
>> WebBrowser1.Document.Body.DomElement.runtimeStyle.zoom = "50%"
>>のように、DomElement プロパティを使って COM オブジェクトを得ることができます。
> 読み込んだあとに実行すれば、うまくいくことがわかりました。
はい。読み込み前には Document プロパティを操作できませんし、操作しても意味がありません。
現在表示されているドキュメントに対して加工する必要があるためです。

なお、WebBrowser が表示できるものは本来、 Web ページだけではありません。
Excel、PDF、フォルダー、ActiveXドキュメントなどが表示される可能性があり、
その場合、(アンマネージの)Document プロパティから返されるオブジェクトが異なりますが、
.runtimeStyle にアクセスできるのは、相手が Web ページの場合だけです。

ちなみに、runtimeStyle の部分を currentStyle に変更すると、
現在設定されているスタイルを読み取ることもできます。


>>OLECMDID_OPTICAL_ZOOM が使えるのは IE7 以降ですが、その点は大丈夫でしょうか。
> IE8がインストールされているのでいいかと思ったのですが、そう言うことではないのでしょうか・・
IE8 であれば大丈夫です。お使いの環境が示されていなかったので、念のためにお聞きした次第。

ただ、IE8 だとしたら、参照するべきは SHDocVw.DLL ではない可能性があります。

>> 通らないのであれば、OLECMDID 等が ShDocVW.dll 以外のライブラリに含まれているのかも知れません。
>> (OS /IE によって、タイプライブラリのファイル名が微妙に異なっているため)
手元に資料が無いのでうろ覚えですが、WebBrowser 関連のシェルインターフェイスが定義されているのは
 IE4 … SHDocVw.DLL
 IE5〜IE6 … SHDocVw.DLL + Shell32.DLL
 IE7〜IE9 … IEFrame.DLL + Shell32.DLL
だった気がします(間違ってるかも)。

また、今回はどうだか分かりませんが、32bit / 64bit で差が出ることもあるかもしれません。
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=13838&page=0


>> Dim a As SHDocVw.IWebBrowser2
>> Dim b As SHDocVw.OLECMDID
>>というコードはコンパイルが通りますか?
> ああ、、、ダメのようです。
必要な DLL を参照設定した後、IWebBrowser2 等が SHDocVw 以外の名前空間に
含まれていないかどうか探してみてください。
(Ax何某とか、Interop何某などという名前になっているかも知れません)

どうしても見つからない場合は、別の方法に切り替える必要があるかと思います。

SharpDevelop の場合は分からないのですが、Visual Studio の場合、COM コンポーネントの
タイプライブラリを参照すると、自動的に .NET 用の相互運用アセンブリが作られるようになっています。
もし、SharpDevelop ではうまく生成されないようなら、tlbimp.exe か Aximp.exe を用いて
アセンブリを生成してみてください。
http://support.microsoft.com/kb/304662
http://support.microsoft.com/kb/306718

あるいはもしかしたら、レイトバインドで WebBrowser1.ActiveXInstance.ExecWB() を
呼べるかも知れませんが…これについては試していないので分かりません。


そしてもしも、レイトバインドでは IWebBrowser2.ExecWB を呼び出せず、かつ、
IWebBrowser2 のための相互運用アセンブリも用意できないのだとしたら、ExecWB メソッドを呼び出すために
IWebBrowser2 インターフェイスの定義を自分で記述してやる必要がありそうです。
引用返信 編集キー/
■60565 / inTopicNo.10)  Re[4]: vb.netでのWebBrowserの縮小表示について
□投稿者/ やんまー (46回)-(2011/07/08(Fri) 18:15:26)
魔界の仮面弁士 さん

たびたびありがとうございます。



> >> 通らないのであれば、OLECMDID 等が ShDocVW.dll 以外のライブラリに含まれているのかも知れません。
> >> (OS /IE によって、タイプライブラリのファイル名が微妙に異なっているため)
> 手元に資料が無いのでうろ覚えですが、WebBrowser 関連のシェルインターフェイスが定義されているのは
>  IE4 … SHDocVw.DLL
>  IE5〜IE6 … SHDocVw.DLL + Shell32.DLL
>  IE7〜IE9 … IEFrame.DLL + Shell32.DLL
> だった気がします(間違ってるかも)。
>

Aximp.exeをつかうとSHDocVw.DLLでもIEFrame.DLLでも同じように
SHDocVw.dll
AxSHDocVw.dll
が生成されてきました。

ただ、IEFrame.DLLから生成した方を参照してカスタムコンポーネントとして追加しようとするとエラーになりました・・・

「アセンブリ'AxSHDocVw.Version=1.1.0.0, Cukture=neutral.publicKey.Token=null'からの型'AxSHDocVw.AxWebBrowserEventMulticaster'にあるメソッド'FileDownload'に実装が含まれていません。」




> また、今回はどうだか分かりませんが、32bit / 64bit で差が出ることもあるかもしれません。
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=13838&page=0
>
>


64Bitも考慮したいですが、とりあえず32Bitで良いです。




> >> Dim a As SHDocVw.IWebBrowser2
> >> Dim b As SHDocVw.OLECMDID
> >>というコードはコンパイルが通りますか?
>>ああ、、、ダメのようです。
> 必要な DLL を参照設定した後、IWebBrowser2 等が SHDocVw 以外の名前空間に
> 含まれていないかどうか探してみてください。
> (Ax何某とか、Interop何某などという名前になっているかも知れません)
>


すいません・・・これはどうやればいいのでしょうか・・・VisualStudioではそのような機能があるのでしょうか・・・
とりあえず「AxSHDocVw.」とやってからctrl+spaceを押してみましたが、無いようでした。




> どうしても見つからない場合は、別の方法に切り替える必要があるかと思います。
>
> SharpDevelop の場合は分からないのですが、Visual Studio の場合、COM コンポーネントの
> タイプライブラリを参照すると、自動的に .NET 用の相互運用アセンブリが作られるようになっています。
> もし、SharpDevelop ではうまく生成されないようなら、tlbimp.exe か Aximp.exe を用いて
> アセンブリを生成してみてください。
> http://support.microsoft.com/kb/304662
> http://support.microsoft.com/kb/306718
>
> あるいはもしかしたら、レイトバインドで WebBrowser1.ActiveXInstance.ExecWB() を
> 呼べるかも知れませんが…これについては試していないので分かりません。
>
>
> そしてもしも、レイトバインドでは IWebBrowser2.ExecWB を呼び出せず、かつ、
> IWebBrowser2 のための相互運用アセンブリも用意できないのだとしたら、ExecWB メソッドを呼び出すために
> IWebBrowser2 インターフェイスの定義を自分で記述してやる必要がありそうです。


簡単にできそうだと思っていたのですが、
かなり難しそうですね。。。。

いろいろ考えてくださって申し訳ありません。。。
引用返信 編集キー/
■60566 / inTopicNo.11)  Re[5]: vb.netでのWebBrowserの縮小表示について
□投稿者/ 魔界の仮面弁士 (2241回)-(2011/07/08(Fri) 20:04:13)
No60565 (やんまー さん) に返信
>>必要な DLL を参照設定した後、IWebBrowser2 等が SHDocVw 以外の名前空間に
>>含まれていないかどうか探してみてください。

手元の Visual Studio 2008 環境では、参照設定すると Interop.SHDocVw.dll が
自動生成されました。それを、「.NET Reflector v6.8」で参照してみると、
その Interop.SHDocVw アセンブリの中に SHDocVw.IWebBrowser2 がありました。

ただし、Visual Studio のインテリセンスでは表示されませんでした。開発環境からは非表示のようです。


> 簡単にできそうだと思っていたのですが、
> かなり難しそうですね。。。。

手元の環境( XP/SP3 + IE8 + VB2008 )では、下記のようにして拡大/縮小できました。

Private Sub Form1_Load(ByVal sender As Object, _
                       ByVal e As EventArgs) Handles Me.Load
    TrackBar1.Minimum = 10
    TrackBar1.Maximum = 1000
    TrackBar1.LargeChange = 10
    TrackBar1.SmallChange = 1
    TrackBar1.Value = 100

    WebBrowser1.Navigate("http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2006/09/webbrowser_bcb8.html")
End Sub

Private Sub TrackBar1_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TrackBar1.ValueChanged
    Dim wb As Object = WebBrowser1.ActiveXInstance
    If wb IsNot Nothing Then
        Const OLECMDID_OPTICAL_ZOOM As Integer = 63

        Dim pvaIn As Object = TrackBar1.Value
        Dim pvaOut As Object = Type.Missing

        CallByName(WebBrowser1.ActiveXInstance, "[DispID=502]", CallType.Method, _
                   OLECMDID_OPTICAL_ZOOM, 0, pvaIn, pvaOut)
    End If
End Sub

引用返信 編集キー/
■60567 / inTopicNo.12)  Re[6]: vb.netでのWebBrowserの縮小表示について
□投稿者/ 魔界の仮面弁士 (2242回)-(2011/07/08(Fri) 20:32:36)
No60566 (魔界の仮面弁士) に追記
>         CallByName(WebBrowser1.ActiveXInstance, "[DispID=502]", CallType.Method, _
>                    OLECMDID_OPTICAL_ZOOM, 0, pvaIn, pvaOut)

別案として。


Private Sub TrackBar1_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TrackBar1.ValueChanged
    Dim wb As Object = WebBrowser1.ActiveXInstance
    If wb IsNot Nothing Then
        Dim asm As Assembly = Assembly.GetAssembly(GetType(Form))
        Dim t As Type = asm.GetType("System.Windows.Forms.UnsafeNativeMethods+IWebBrowser2")

        Const OLECMDID_OPTICAL_ZOOM As Integer = 63
        Dim pvaIn As Object = TrackBar1.Value
        Dim params() As Object = {OLECMDID_OPTICAL_ZOOM, 0, pvaIn, IntPtr.Zero}

        t.GetMethod("ExecWB").Invoke(wb, BindingFlags.InvokeMethod, Nothing, params, Nothing)
    End If
End Sub

引用返信 編集キー/
■60581 / inTopicNo.13)  Re[6]: vb.netでのWebBrowserの縮小表示について
□投稿者/ やんまー (47回)-(2011/07/11(Mon) 10:34:06)
2011/07/11(Mon) 14:32:09 編集(投稿者)

魔界の仮面弁士 さん


あああああ!
すごいです!

トラックバーで変更できるように上手く実行できました!

うれしいです!!!!!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -