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

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

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

Re[7]: WebBrowserのDOMを利用した背景色の設定


(過去ログ 122 を表示中)

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

■72878 / inTopicNo.1)  WebBrowserのDOMを利用した背景色の設定
  
□投稿者/ ネーブル (1回)-(2014/07/30(Wed) 13:07:51)

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

VB2008でWinFormアプリを開発中で、WebBrowserを使用しています。
WebBrowser内に表示されているページ内の文字検索を行うため、
こちらのサイトの以下の質問や、他情報を参考に勉強しているところです。
※参考にしている主なサイト
http://bbs.wankuma.com/index.cgi?mode=al2&namber=3359&KLOG=12
http://msdn.microsoft.com/en-us/library/aa741548(v=vs.85).aspx

ただ、ここで分からないことがあります。
まずは、以下のコードで、ページ内のキーワードに該当する箇所の背景色を
黄色にすることができたのですが、

Dim oBody As Object = Nothing
Dim oRange As Object = Nothing

oBody = wb.Document.Body.DomElement
oRange = oBody.createTextRange()
Do
    If Not CBool(oRange.findText(KeyWD, 1, 0)) Then   'KeyWDはキーワードの文字変数
        Exit Do
    End If
    oRange.execCommand("BackColor", False, "YELLOW")  '※背景色を設定
    oRange.collapse(False)
Loop


このコードの「※背景色を設定」の行の"YELLOW"を変数にしたくて、
例えば

    Dim hColor As String = "YELLOW"

という変数を用意し、「※背景色を設定」の行を

    oRange.execCommand("BackColor", False, hColor)  '※背景色を設定

とすると、背景色が反映されません。
ここの引数に変数を使う場合はどのようにすればいいのでしょうか?

よろしくお願いします。

引用返信 編集キー/
■72880 / inTopicNo.2)  Re[1]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ 魔界の仮面弁士 (61回)-(2014/07/30(Wed) 13:47:12)
No72878 (ネーブル さん) に返信
> Dim hColor As String = "YELLOW"
> ここの引数に変数を使う場合はどのようにすればいいのでしょうか?

文字列リテラルの代わりに変数を指定する場合には、「String 型変数」ではなく、
「String 値を格納した Object 型変数」を使って下さい。

もし、String 変数のままにしておきたい場合には、
 oRange.execCommand("BackColor", False, (hColor))
のように、変数を括弧で囲んで渡すようにします。
引用返信 編集キー/
■72882 / inTopicNo.3)  Re[2]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ ネーブル (2回)-(2014/07/30(Wed) 14:37:14)
No72880 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士様、早速のご回答、誠にありがとうございました。

> もし、String 変数のままにしておきたい場合には、
>  oRange.execCommand("BackColor", False, (hColor))
> のように、変数を括弧で囲んで渡すようにします。

上記方法でうまく背景色がつきました。ありがとうございました。
しかしながら、

> 文字列リテラルの代わりに変数を指定する場合には、「String 型変数」ではなく、
> 「String 値を格納した Object 型変数」を使って下さい。

このObject 型変数の使い方をよく理解していません。
単に、

Dim oColor As Object = "YELLOW"

のような代入ではダメなのでしょうか?
(この場合も、やはり背景色がつきませんでした。)

度々すみませんが、よろしくお願いします。
引用返信 編集キー/
■72883 / inTopicNo.4)  Re[3]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ 魔界の仮面弁士 (62回)-(2014/07/30(Wed) 15:30:35)
No72882 (ネーブル さん) に返信
>>  oRange.execCommand("BackColor", False, (hColor))
> 上記方法でうまく背景色がつきました。ありがとうございました。

うまくいったようで何よりです。


>>文字列リテラルの代わりに変数を指定する場合には、「String 型変数」ではなく、
>>「String 値を格納した Object 型変数」を使って下さい。
> このObject 型変数の使い方をよく理解していません。

失礼しました。駄目っぽいですね。VB6 においては、
 × Dim hColor As String: hColor = "YELLOW"
 ○ Dim hColor As Variant: hColor = "YELLOW"
という対応だったので、VB.NET でも同じだと思い込んでいました。



ついでに C# 4.0 でも実験してみたけれど、こちらは期待動作させられず。
そもそも、findText が何故か false を返して来なかった…。VB と何が違うのだろう。
引用返信 編集キー/
■72884 / inTopicNo.5)  Re[4]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ ネーブル (3回)-(2014/07/30(Wed) 15:46:32)
No72883 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士様、早速のコメント、誠にありがとうございました。

とりあえず、

>  oRange.execCommand("BackColor", False, (hColor))

のように括弧つきだと上手くいきましたので、本スレッドは解決済みとさせて頂きますが、
後学のため、括弧つきだと上手くいく理由をもしもご存じであれば、ご教示頂けると幸いです。


何はともあれ、本当にありがとうございました。感謝申し上げます。
解決済み
引用返信 編集キー/
■72891 / inTopicNo.6)  Re[5]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ 魔界の仮面弁士 (63回)-(2014/07/30(Wed) 17:28:15)
No72884 (ネーブル さん) に返信
> 後学のため、括弧つきだと上手くいく理由をもしもご存じであれば、ご教示頂けると幸いです。
VBA / VBScript において、変数を渡した場合と定数を渡した場合との
データ型の違いについて、下記のような資料がありました。
http://program.station.ez-net.jp/special/vc/atl-com/variant.asp

自分も、他人に説明できるほどの知識は持ち合わせていないのですが、
恐らくは execCommand が受け取るデータが、VARIANT 構造体の
「VT_BSTR」なのか「VT_BSTR | VT_REF」なのかで、
成否が異なってくるのだと予想しています。


試しに Marshal.StringToBSTR を試してみたものの、
思うような結果を得られなかったのですが、とりあえず、
下記のコードにしてみたら、黄色に着色されました。

Dim sColor As String = TextBox1.Text '"YELLOW"
Dim hColor As New System.Runtime.InteropServices.VariantWrapper(sColor)
oRange.execCommand("BackColor", False, hColor.WrappedObject)
引用返信 編集キー/
■72901 / inTopicNo.7)  Re[6]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ ネーブル (4回)-(2014/07/31(Thu) 16:18:52)
魔界の仮面弁士様、この度は色々とご尽力を頂き、誠にありがとうございました。
私には理解できない世界がまだありますが、ひとつずつ勉強していきたく存じます。

本当に助かりました。今後ともよろしくお願いします。
引用返信 編集キー/
■72902 / inTopicNo.8)  Re[7]: WebBrowserのDOMを利用した背景色の設定
□投稿者/ ネーブル (5回)-(2014/07/31(Thu) 16:19:19)
解決済みとします。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -