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

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

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

Re[7]: ウェブブラウザで表示したページを、拡大・縮小表示


(過去ログ 69 を表示中)

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

■40006 / inTopicNo.1)  ウェブブラウザで表示したページを、拡大・縮小表示
  
□投稿者/ RT (58回)-(2009/08/19(Wed) 13:53:47)

分類:[C#] 

たびたびお世話になります。RTです。

Visual C# 2008 Express Editionで、開発を行っております。

質問なのですが、ウェブブラウザで表示したページを、拡大・縮小表示したいのです。

Document.Body.Style.Zoom;

↑は、C#のコードではないのですが、これに似たようなもので何かないでしょうか?



引用返信 編集キー/
■40008 / inTopicNo.2)  Re[1]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ Hongliang (445回)-(2009/08/19(Wed) 14:11:21)
HtmlElement には Style プロパティがあるので、
Document.Body.Style
まではそのままのコードで書けますね。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.style.aspx
あとは zoom:hoge; を文字列として追加してやればいいかと。

ただ、body の zoom を変更するとスクロールバーまで拡大縮小されるみたいですけど。
引用返信 編集キー/
■40011 / inTopicNo.3)  Re[2]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (59回)-(2009/08/19(Wed) 14:29:03)
2009/08/19(Wed) 15:42:51 編集(投稿者)

>http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmlelement.style.aspx
>あとは zoom:hoge; を文字列として追加してやればいいかと

↑書いてある内容が難しくて、理解出来ません。

>ただ、body の zoom を変更するとスクロールバーまで拡大縮小されるみたいですけど。

それは、まずいかも。
引用返信 編集キー/
■40017 / inTopicNo.4)  Re[3]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 通りすがり (50回)-(2009/08/19(Wed) 15:38:35)
No40011 (RT さん) に返信
以前このように書いていらっしゃるのですから

No39943 (RT さん) に返信
> ■No39936 (魔界の仮面弁士 さん) に返信
>>今までのやりとりを見ていると、
>>
>>『○○という方法があります』
>>『初心者向けでは無いと思います』
>>『××という方法もあります』
>>『使い勝手が悪いです』
>>『では、△△という方法も…』
>>
>>が繰り返されているので、回答する意欲が削がれてしまいます。。。
>>こちらから提示した情報が、理由説明がほとんど無いまま却下され続けるわけですから。
>
> すいませんでした。以後気を付けます。

口先だけでなく、行動で示してくださいね。
引用返信 編集キー/
■40018 / inTopicNo.5)  Re[4]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (61回)-(2009/08/19(Wed) 15:43:46)

> 口先だけでなく、行動で示してくださいね。

編集させていただきました。
引用返信 編集キー/
■40139 / inTopicNo.6)  Re[5]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (77回)-(2009/08/20(Thu) 17:05:45)
Private Sub Command1_Click()
Me.WebBrowser1.Document.body.runtimeStyle.Zoom = "250%"
End Sub

Private Sub Command2_Click()
Me.WebBrowser1.Document.body.runtimeStyle.Zoom = "50%"

VBAでは、↑のようなコードで、出来るようです。
引用返信 編集キー/
■40154 / inTopicNo.7)  Re[1]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 魔界の仮面弁士 (1232回)-(2009/08/20(Thu) 18:57:04)
No40006 (RT さん) に返信
> 質問なのですが、ウェブブラウザで表示したページを、拡大・縮小表示したいのです。

拡大・縮小というのが、IE3 以上でいうところの [表示]-[文字のサイズ] の機能でよければ、

 object pvaIn = 4; //文字サイズ。0=最小,1=小,2=中,3=大,4=最大
 object pvaOut = Type.Missing; // 変更結果(0〜4)のいずれかが返される
 ((SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance).ExecWB(
   SHDocVw.OLECMDID.OLECMDID_ZOOM,
   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
   ref pvaIn,
   ref pvaOut);

というコードを使うことができます。


一方、それが IE7 以上でいうところの [表示]-[拡大]の方の意味だとすれば、

 object pvaIn = 250; //パーセント。10〜1000 の範囲
 object pvaOut = Type.Missing; // 変更結果が返される
 SHDocVw.OLECMDID OLECMDID_OPTICAL_ZOOM = (SHDocVw.OLECMDID)63;
 ((SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance).ExecWB(
   OLECMDID_OPTICAL_ZOOM,
   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
   ref pvaIn,
   ref pvaOut);

とすれば OK です。


提示された style.zoom の方の話については、投稿を分けます。
引用返信 編集キー/
■40157 / inTopicNo.8)  Re[6]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 魔界の仮面弁士 (1233回)-(2009/08/20(Thu) 19:19:26)
No40139 (RT さん) に返信
> Me.WebBrowser1.Document.body.runtimeStyle.Zoom = "250%"

上記は <BODY> に対して style="zoom:250%" 相当の指定を行うための物です。
この構文を理解するために、まずはアンマネージ DOM における
 .runtimeStyle
 .style
 .currentStyle
の違いについて調べておいてください。


さて、マネージ DOM でスタイルを指定する場合の話ですが、こちらは、HtmlElement クラスの
 .Style
というプロパティが該当します。これは、アンマネージ版における .style に相当する物で、
 MessageBox.Show(webBrowser1.Document.Body.Style);
 webBrowser1.Document.Body.Style += ";Zoom:250%";
 MessageBox.Show(webBrowser1.Document.Body.Style);
のような記述が可能です。


ただし、currentStyle や runtimeStyle に相当する機能は用意されていないため、
たとえば現在の拡大率を調べる必要があるならば、
 mshtml.IHTMLElement2 body = (mshtml.IHTMLElement2)webBrowser1.Document.Body.DomElement;
 MessageBox.Show((string)((mshtml.IHTMLCurrentStyle2)body.currentStyle).zoom);
 ((mshtml.IHTMLStyle3)body.runtimeStyle).zoom = "250%";
 MessageBox.Show((string)((mshtml.IHTMLCurrentStyle2)body.currentStyle).zoom);
のように、アンマネージ版の DOM を使わねばなりません。



No40008 (Hongliang さん) に補足
> ただ、body の zoom を変更するとスクロールバーまで拡大縮小されるみたいですけど。

その動作は、IE のバージョンによって異なります。
また、後方互換モードか否かによっても変化します。

具体的には、
 mshtml.IHTMLDocument5 doc = (mshtml.IHTMLDocument5)webBrowser1.Document.DomDocument;
 string compatMode = doc.compatMode;
を実行したときに、compatMode が "BackCompat" となる Web サイトであればスクロールバーごと
拡大されますし、"CSS1Compat" となる Web サイトならばスクロールバーは変化しないかと思います。
引用返信 編集キー/
■40163 / inTopicNo.9)  Re[2]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (80回)-(2009/08/20(Thu) 20:25:04)
No40154 (魔界の仮面弁士 さん) に返信

 private void button8_Click(object sender, EventArgs e)
        {
            object pvaIn = 250; //パーセント。10〜1000 の範囲
            object pvaOut = Type.Missing; // 変更結果が返される
            SHDocVw.OLECMDID OLECMDID_OPTICAL_ZOOM = (SHDocVw.OLECMDID)63;
            ((SHDocVw.IWebBrowser2)webBrowser_Main.ActiveXInstance).ExecWB(
              OLECMDID_OPTICAL_ZOOM,
              SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
              ref pvaIn,
              ref pvaOut);
        }
↑のコードを使わせて頂きました。

 ((SHDocVw.IWebBrowser2)webBrowser_Main.ActiveXInstance).ExecWB(
              OLECMDID_OPTICAL_ZOOM,
              SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
              ref pvaIn,
              ref pvaOut);

 ↑の部分で、↓のエラーが出ます。
登録されていないドロップ先の登録を解除しています (HRESULT からの例外: 0x80040100 (DRAGDROP_E_NOTREGISTERED))

アドバイスお願いします。


引用返信 編集キー/
■40172 / inTopicNo.10)  Re[3]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 魔界の仮面弁士 (1235回)-(2009/08/20(Thu) 21:00:02)
No40163 (RT さん) に返信
> 登録されていないドロップ先の登録を解除しています (HRESULT からの例外: 0x80040100 (DRAGDROP_E_NOTREGISTERED))

そのエラーは、以下の要因で発生する事があります。

・ドキュメントがロードされていない段階で呼び出した場合。
・pvaIn が「VT_I4」相当の型で無い場合(.NET 的には、Int32型の値を持った Object 型変数に相当)。
引用返信 編集キー/
■40185 / inTopicNo.11)  Re[4]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (83回)-(2009/08/20(Thu) 23:39:38)
No40172 (魔界の仮面弁士 さん) に返信
> ■No40163 (RT さん) に返信
>>登録されていないドロップ先の登録を解除しています (HRESULT からの例外: 0x80040100 (DRAGDROP_E_NOTREGISTERED))
>
> そのエラーは、以下の要因で発生する事があります。
>

> ・ドキュメントがロードされていない段階で呼び出した場合。

ドキュメントが完全にロードされている状態で、実行ボタンを押しました。


> ・pvaIn が「VT_I4」相当の型で無い場合(.NET 的には、Int32型の値を持った Object 型変数に相当)。

object pvaIn = 250; は、Int32型の値を持った Object 型変数ではないのでしょうか?
引用返信 編集キー/
■40205 / inTopicNo.12)  Re[5]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 魔界の仮面弁士 (1236回)-(2009/08/21(Fri) 11:08:25)
No40185 (RT さん) に返信
>>>登録されていないドロップ先の登録を解除しています (HRESULT からの例外: 0x80040100 (DRAGDROP_E_NOTREGISTERED))
>>そのエラーは、以下の要因で発生する事があります。
>>・ドキュメントがロードされていない段階で呼び出した場合。
> ドキュメントが完全にロードされている状態で、実行ボタンを押しました。
あと、思いつく物と言えば、
 ・そのバージョンの IE でサポートされていない OLECMDID が指定されている。
 ・OLECMDID の指定と、pvaIn/pvaOut の組み合わせが正しくない(型および値の範囲)。
ぐらいですかね。当方ではエラーなく呼び出せていますし。


>>・pvaIn が「VT_I4」相当の型で無い場合(.NET 的には、Int32型の値を持った Object 型変数に相当)。
> object pvaIn = 250; は、Int32型の値を持った Object 型変数ではないのでしょうか?
OK です。
指定としては正しいので、あとは環境側の問題など、別の要因があるのかも知れません。

こちらでも検証してみますので、問題が発生したときの
 (1) 問題の発生したコード。
 (2) 表示させたサイトの URL。
 (3) Internet Explorer のバージョンおよび Service Pack。
 (4) Windows のバージョンおよび Service Pack。
 (5) .NET Framework のバージョンおよび Service Pack。
 (6) Visual Studio のバージョンおよび Service Pack。
を提供していただけないでしょうか。


ちなみに、当方で動作しているコードはこちら。


// IE8
// WinXP Pro/SP3
// .NET Framework 3.5/SP1
// VS2008 TeamDev/SP1

using System;
using System.Windows.Forms;
using System.Diagnostics;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // SHDocVw.InternetExplorer ie = (SHDocVw.InternetExplorer)webBrowser1.ActiveXInstance;
        // ie.RegisterAsDropTarget = false;
        hScrollBar1.Minimum = 10;
        hScrollBar1.Maximum = 1000;
        hScrollBar1.LargeChange = 25;
        hScrollBar1.SmallChange = 1;
        hScrollBar1.Value = 100;
        hScrollBar1.Enabled = false;
        Text = "100%";
        webBrowser1.Navigate("http://openlab.ring.gr.jp/k16/htmllint/htmllint.html");
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        Debug.WriteLine("Completed <- " + e.Url);
        hScrollBar1.Enabled = true;
    }

    private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
    {
        Text = hScrollBar1.Value + "%";
        object pvaIn = hScrollBar1.Value;
        object pvaOut = Type.Missing;
        SHDocVw.OLECMDID OLECMDID_OPTICAL_ZOOM = (SHDocVw.OLECMDID)63;
        try
        {
            SHDocVw.IWebBrowser2 wb = (SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance;
            wb.ExecWB(OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        Debug.WriteLine("Navigating -> " + e.Url);
        hScrollBar1.Enabled = false;
    }
}

引用返信 編集キー/
■40211 / inTopicNo.13)  Re[6]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ RT (85回)-(2009/08/21(Fri) 13:16:19)
2009/08/21(Fri) 13:17:33 編集(投稿者)

No40205 (魔界の仮面弁士 さん) に返信

IE6→IE8にアップデートすることで、問題解決することが出来ました。

魔界の仮面弁士さん、Hongliangさん、通りすがりさんありがとうございました。

またよろしくお願いします。

解決済み
引用返信 編集キー/
■40217 / inTopicNo.14)  Re[7]: ウェブブラウザで表示したページを、拡大・縮小表示
□投稿者/ 魔界の仮面弁士 (1238回)-(2009/08/21(Fri) 14:52:59)
No40211 (RT さん) に返信
> IE6→IE8にアップデートすることで、問題解決することが出来ました。

だから最初に、
          **********************
>> 一方、それが IE7 以上でいうところの [表示]-[拡大]の方の意味だとすれば、
          **********************
と書いておいたのですけれどね。


なお、ズーム値として指定可能な 10 〜 1000 という範囲については、
下記のようにして調べる事が出来ます。

object pvaIn = Type.Missing;
object pvaOut = int.MaxValue;
SHDocVw.OLECMDID OLECMDID_OPTICAL_GETZOOMRANGE = (SHDocVw.OLECMDID)64;
SHDocVw.IWebBrowser2 wb = (SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance;
wb.ExecWB(OLECMDID_OPTICAL_GETZOOMRANGE, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);

int minimum = (int)pvaOut & 0xffff;
int maximum = ((int)pvaOut >> 0x10) & 0xffff;


そしてこうした、OLECMDID_OPTICAL_ZOOM や OLECMDID_OPTICAL_GETZOOMRANGE といった、
OLECMDID 関連のコマンドについては、下記に一覧表があります。
http://msdn.microsoft.com/en-us/library/ms691264.aspx

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -