WebBrowserコントールで表示したページ内を検索するには?

解決


ともタソ  2004-08-19 01:20:43  No: 115723

初めて書き込みします、ともタソと申します。

WebBrowserコントロールを使用してページを表示した後に、
その表示したページ内を検索する機能を作りたいと考えてます。

テキストボックスに文字列を入力して、検索ボタンを押すと
WebBrowserコントロールに表示したページで該当する文字列を
選択反転表示させるといったような風にしたいのですが…。

環境はWinXP Home SP1でVisual Basic 6.0 SP5を使用しています。
よろしくお願い致します。m(_ _)m


魔界の仮面弁士  2004-08-19 02:10:45  No: 115724

昔、某所にそのようなサンプルを投稿した事があります。
参考になれば。

| Subject: [VB-ML:05476] Re: WebBrowser コントロールで反転
| Date: Mon, 05 Jun 2000 15:32:56 +0900
---------

> WebBrowserコントロールを使用して、
> HTML文書の検索と表示を行うプログラムを作成しています。
> 表示した文書を検索した単語を反転したい
> (MSDNライブラリで検索したときのような動作)のですが、
> どのようにすれば実現できるのでしょうか?
> VB6(SP3) Win95/98/2000 IE4.01SP1以降

当方環境は、 Win98(SP1) + IE 5.01 + VB6 EE(SP3) です。
以下は、IHTMLTxtRange を使って、Text1に指定された語句を検索し、
それを黄色く反転させるサンプルです。

# エラー処理等は省いてあります。

Private Sub Command1_Click()
    Dim Doc As Object       'MSHTML.HTMLDocument
    Dim Body As Object      'MSHTML.HTMLBody
    Dim objRange As Object  'MSHTML.IHTMLTxtRange
    Dim BMK As String
    'Dim L As Long
    
    
    '検索文字列を入れておいてください。
    If Len(Text1.Text) = 0 Then Exit Sub
    
    Set Doc = WebBrowser1.Document
    Set Body = Doc.Body
    Set objRange = Body.createTextRange
    
    '≫≫≫≫≫ 検索開始
    'For L = 0 To 255
    '   If objRange.findText(Text1.Text) = False Then Exit For
    Do While objRange.findText(Text1.Text)
        '最初に見つかった位置を保存しておきます。
        If Len(BMK) = 0 Then BMK = objRange.getBookmark
        
        '検索した語句を黄色く反転させる。
        objRange.execCommand "BackColor", False, "YELLOW"
        
        '論理カーソル位置を、検索した語句の末尾に移動させる。
        objRange.collapse False
    Loop
    'Next L
    '≪≪≪≪≪ 検索終了
    
    'ついでに、最初に見つけた語句の位置までスクロールさせています。
    If Len(BMK) Then
        objRange.moveToBookmark BMK
        objRange.scrollIntoView
    End If
    
    '最後は一応、後始末を。
    Set objRange = Nothing
    Set Body = Nothing
    Set Doc = Nothing
End Sub

(以下略)


ともタソ  2004-08-19 04:19:26  No: 115725

魔界の仮面弁士さん、どうもです〜。
いや〜、参考になるどころか上記のソースをちょい改良して完成ですw

ただ気になる点が1つあるんですけど、文字列を反転させた後に、
元の色に戻すときに、
objRange.execCommand "BackColor", False, Body.BgColor
で、もう一度背景色を変えるという方法にしたんですが、
objRange.execCommand "BackColor"を使用せずに背景色を変更することは
可能でしょうか?


魔界の仮面弁士  2004-08-19 19:02:30  No: 115726

選択範囲を適当なタグ(SPANとか)で囲って、そのタグに対して、
  .runtimeStyle.backColor = "yellow"
などとする事もできるかと。


ともタソ  2004-08-19 22:05:52  No: 115727

どうもです〜。
なるほど^^
.runtimeStyle.backColor
も試してみますね。
おかげさまで、自分の考えていたように動作するものが出来ました。
どうもありがとうございました〜。m(_ _)m


Joan  2004-11-04 06:21:58  No: 115728

これを1行のTextBox、あるいは、複数行のTEXTAREA に入力された
文字列までに、検索対象を拡大するにはどうすればいいのでしょうか?
  と、申しますのも、Q&Aの2003年6月にありました、「テキストボックスに漢字を入力するには」のやり方と、上記をあわせれば、SelColorの指定ができる、Unicode対応のRichTextBoxのようなものが
できそうに思ったのです。(WinXP,VB6SP5,IE6)

  * いつも、興味深く拝見しております。解決がチェックされていますが、こういうケースでは別の新たな質問にしたほうが良いのでしょうか?


魔界の仮面弁士  2004-11-04 10:05:56  No: 115729

個人的には、新たな質問として提示された方が良いかと思います。
その上で、関連する過去ログのURLを示されれば良いかと。

で、結論から言うと、(HTMLの)textarea を使った方法では、文字単位の
色指定はできません。textarea要素自体に、その機能が無いためです。

ただし、div要素等であれば、その内側に任意のインライン要素を
含められますので、文字単位で色を変える事も可能です。
(IE5以降では、編集可能なDIVタグも生成できますし)

ただ、そのような事をするのであれば、最初からUnicode対応の
RichTextBox を利用した方が手っ取り早いでしょう。

[Unicode Replacements for VB ANSI Controls]
http://www.cyberactivex.com/product008.htm


Joan  2004-11-05 01:33:08  No: 115730

魔界の仮面弁士様
早速のご返事、ありがとうございます。
textarea をキーワードで検索すると、同様の質問があって、同様の回答をされていることがわかりました。申し訳ありません。

VB.NET で、RichtTextBoxを使うと、どうやら、Unicodeの文字が
表示できるように見えていますので、VB6はあきらめて、そちらで作ってみようと思います。

また、紹介していただいたサイトのコントロール(30日間無料)、
ダウンロードしてみましたが、どうしたわけか、フォームに貼り付けたところ、文字の表示、背景色の変更、その他など
私のVB6ではまともに動作しませんでした。英語版のVB6が必要だったの
かもしれません。
いずれにしてましても、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加