2009/08/12(Wed) 12:01:14 編集(投稿者)
■No39678 (魔界の仮面弁士 さん) に返信
> ■No39656 (魔界の仮面弁士) に追記
>>TD そのものに背景色を設定してしまうとか。
>
> ※おまけ
>
> セル背景ではなく、セル内のテキスト部分に背景色をつけるコード。
>
> private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
> {
> HtmlElementCollection tags = webBrowser1.Document.GetElementsByTagName("TD");
> if (tags.Count == 0) return;
> tags[0].Focus();
>
> // 参照設定として[Microsoft HTML Object Library]が必要です。
> mshtml.IHTMLDocument2 dom = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument;
> mshtml.IHTMLSelectionObject selectionObject = dom.selection;
> mshtml.IHTMLTxtRange txtRange = (mshtml.IHTMLTxtRange)selectionObject.createRange();
> mshtml.IHTMLElement tag = (mshtml.IHTMLElement)tags[0].DomElement;
> txtRange.moveToElementText(tag);
> txtRange.execCommand("BackColor", false, ColorTranslator.ToHtml(Color.Yellow));
> /*
> System.Runtime.InteropServices.Marshal.ReleaseComObject(tag);
> System.Runtime.InteropServices.Marshal.FinalReleaseComObject(txtRange);
> System.Runtime.InteropServices.Marshal.FinalReleaseComObject(selectionObject);
> System.Runtime.InteropServices.Marshal.ReleaseComObject(dom);
> */
> }
>
>
> WebBrowser 側でどのように実装されているのか良く分からなかったので、
> (Final)ReleaseComObject メソッドを呼ぶべきかどうか判断が付かなかった…。
>
> # txtRange/selectionObject はカプセル化されて無さそうなので、解放できそうだけれども、
> # DomDocument/DomElement から受け取ったオブジェクトは、利用側で減じて良いのだろうか?
アドバイスに従い、以下のようにコードを書いて、ページ内の文字を蛍光ペンで塗りつぶした感じが実現出来ました。ありがとうございます。
private void webBrowser_Main_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
foreach (HtmlElement tags in webBrowser_Main.Document.GetElementsByTagName("TD"))
{
mshtml.IHTMLDocument2 dom = (mshtml.IHTMLDocument2)webBrowser_Main.Document.DomDocument;
mshtml.IHTMLSelectionObject selectionObject = dom.selection;
mshtml.IHTMLTxtRange txtRange = (mshtml.IHTMLTxtRange)selectionObject.createRange();
mshtml.IHTMLElement tag = (mshtml.IHTMLElement)tags.DomElement;
txtRange.moveToElementText(tag);
txtRange.execCommand("BackColor", false, ColorTranslator.ToHtml(Color.Wheat));
}
}
次に、イメージファイルも同じようにしたいのですが、ちょっとコードを変えるだけで出来るでしょうか?
それとも、イメージファイルの場合は、背景色が変わっても、見た目は変わらないでしょうか?
もしくは枠の色を変えるとか出来るでしょうか?