|
分類:[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
}
|