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

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

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

Re[1]: webBrowserでテキスト位置を保存する方法


(過去ログ 47 を表示中)

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

■25755 / inTopicNo.1)  webBrowserでテキスト位置を保存する方法
  
□投稿者/ まぐねしうむ (47回)-(2008/09/25(Thu) 14:51:22)

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

http://bbs.wankuma.com/index.cgi?mode=al2&namber=25663
上記質問でも記載しましたが選択している位置自体は
取得する事が出来ました。

ただ、ページを移動すると (IHTMLTxtRange)doc.selection.createRange();で取得した
IHTMLTxtRangeの中身が破壊されてしまいます。

・htmlText
'(new System.Collections.Generic.Mscorlib_CollectionDebugView<Design.Editor.strcutTxtRange>
(listTxtRange)).Items[0].objRange.htmlText' は、型 'System.Runtime.InteropServices.COMException' の例外をスローしました。

・text
'(new System.Collections.Generic.Mscorlib_CollectionDebugView<Design.Editor.strcutTxtRange>
(listTxtRange)).Items[0].objRange.text' は、型 'System.Runtime.InteropServices.COMException' の例外をスローしました。

これを保存=>Page移動後に読み取る方法は無いのでしょうか?
すみませんがどなたか教えてください。

以下書いたコードです。

        /// <summary>
        /// テキスト位置情報を保持する
        /// </summary>
        List<strcutTxtRange> listTxtRange = new List<strcutTxtRange>();

        /// <summary>
        /// テキスト選択情報を保持する構造体
        /// </summary>
        private struct strcutTxtRange
        {
            /// <summary>
            /// 表示形式
            /// </summary>
            public CharacterDecoration CharType;

            /// <summary>
            /// 現在のUri
            /// </summary>
            public string Uri;

            /// <summary>
            /// 選択情報
            /// </summary>
            public mshtml.IHTMLTxtRange objRange;

            /// <summary>
            /// 色情報
            /// </summary>
            public string color;
        }

        void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            SetBackgroundColor(BackColor);

            //着色処理
            mshtml.IHTMLTxtRange objRange;
            for (int i = 0; i < listTxtRange.Count; i++)
            {
                if (listTxtRange[i].Uri == webBrowser.Url.ToString()) //★この時点で中身が例外になっている。
                {
                    if (listTxtRange[i].CharType == CharacterDecoration.ForeColor)
                    {
                        listTxtRange[i].objRange.execCommand("ForeColor", false, listTxtRange[i].color);
                    }
                    else if (listTxtRange[i].CharType == CharacterDecoration.BackColor)
                    {
                        listTxtRange[i].objRange.execCommand("BackColor", false, listTxtRange[i].color);
                    }
                }
            }

            if (Navigated != null)
            {
                Navigated(this, e);
            }
        }

        public Color EditorBackColor
        {
            get
            {
                if (ReadyState != ReadyState.Complete)
                    return Color.White;
                return ConvertToColor(doc.queryCommandValue("BackColor").ToString());
            }
            set
            {
                string colorstr = string.Format("#{0:X2}{1:X2}{2:X2}", value.R, value.G, value.B);
                webBrowser.Document.ExecCommand("BackColor", false, colorstr);

                //選択領域その他を取得する
                GetTxtRange(CharacterDecoration.BackColor, colorstr);
            }
        }

        /// <summary>
        /// 選択された位置を取得する
        /// </summary>
        /// <param name="colorstr"></param>
        private void GetTxtRange(CharacterDecoration type, string colorstr)
        {
            strcutTxtRange strTemp = new strcutTxtRange();

            strTemp.CharType = type;
            strTemp.Uri = webBrowser.Url.ToString();
            strTemp.objRange = (IHTMLTxtRange)doc.selection.createRange();
            strTemp.color = colorstr;
            listTxtRange.Add(strTemp);

            //選択を解除
            doc.selection.empty();
        }

    /// <summary>
    /// 文字修飾宣言
    /// </summary>
    public enum CharacterDecoration
    {
        Italic,
        Bold,
        UnderLine,
        ForeColor,
        BackColor
    }

引用返信 編集キー/
■25756 / inTopicNo.2)  Re[1]: webBrowserでテキスト位置を保存する方法
□投稿者/ まぐねしうむ (49回)-(2008/09/25(Thu) 14:59:06)
申し訳ありません。
環境を設定するのを忘れていました。

正しくは

C# VS2005 SP1

です。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -