初めて書き込みします、ともタソと申します。
WebBrowserコントロールを使用してページを表示した後に、
その表示したページ内を検索する機能を作りたいと考えてます。
テキストボックスに文字列を入力して、検索ボタンを押すと
WebBrowserコントロールに表示したページで該当する文字列を
選択反転表示させるといったような風にしたいのですが…。
環境はWinXP Home SP1でVisual Basic 6.0 SP5を使用しています。
よろしくお願い致します。m(_ _)m
昔、某所にそのようなサンプルを投稿した事があります。
参考になれば。
| 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
(以下略)
魔界の仮面弁士さん、どうもです〜。
いや〜、参考になるどころか上記のソースをちょい改良して完成ですw
ただ気になる点が1つあるんですけど、文字列を反転させた後に、
元の色に戻すときに、
objRange.execCommand "BackColor", False, Body.BgColor
で、もう一度背景色を変えるという方法にしたんですが、
objRange.execCommand "BackColor"を使用せずに背景色を変更することは
可能でしょうか?
選択範囲を適当なタグ(SPANとか)で囲って、そのタグに対して、
.runtimeStyle.backColor = "yellow"
などとする事もできるかと。
どうもです〜。
なるほど^^
.runtimeStyle.backColor
も試してみますね。
おかげさまで、自分の考えていたように動作するものが出来ました。
どうもありがとうございました〜。m(_ _)m
これを1行のTextBox、あるいは、複数行のTEXTAREA に入力された
文字列までに、検索対象を拡大するにはどうすればいいのでしょうか?
と、申しますのも、Q&Aの2003年6月にありました、「テキストボックスに漢字を入力するには」のやり方と、上記をあわせれば、SelColorの指定ができる、Unicode対応のRichTextBoxのようなものが
できそうに思ったのです。(WinXP,VB6SP5,IE6)
* いつも、興味深く拝見しております。解決がチェックされていますが、こういうケースでは別の新たな質問にしたほうが良いのでしょうか?
個人的には、新たな質問として提示された方が良いかと思います。
その上で、関連する過去ログのURLを示されれば良いかと。
で、結論から言うと、(HTMLの)textarea を使った方法では、文字単位の
色指定はできません。textarea要素自体に、その機能が無いためです。
ただし、div要素等であれば、その内側に任意のインライン要素を
含められますので、文字単位で色を変える事も可能です。
(IE5以降では、編集可能なDIVタグも生成できますし)
ただ、そのような事をするのであれば、最初からUnicode対応の
RichTextBox を利用した方が手っ取り早いでしょう。
[Unicode Replacements for VB ANSI Controls]
http://www.cyberactivex.com/product008.htm
魔界の仮面弁士様
早速のご返事、ありがとうございます。
textarea をキーワードで検索すると、同様の質問があって、同様の回答をされていることがわかりました。申し訳ありません。
VB.NET で、RichtTextBoxを使うと、どうやら、Unicodeの文字が
表示できるように見えていますので、VB6はあきらめて、そちらで作ってみようと思います。
また、紹介していただいたサイトのコントロール(30日間無料)、
ダウンロードしてみましたが、どうしたわけか、フォームに貼り付けたところ、文字の表示、背景色の変更、その他など
私のVB6ではまともに動作しませんでした。英語版のVB6が必要だったの
かもしれません。
いずれにしてましても、ありがとうございました。
ツイート | ![]() |