投稿者 アキラ  (社会人) 投稿日時 2020/9/8 10:29:42
WebBrowserで表示している文書の指定キーワードの背景色を変えるため、
以下のページを参考にしてうまくいきました。

http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9299

そこで、指定キーワードの文字色も変えようと思い、
背景色設定コードの次に文字色設定コードを追加しました。

とりあえず、背景色・文字色ともに変更できたのですが、
テキスト量の多いWebページでは、処理が終わるのに非常に時間がかかります。

背景色のみ変更、または文字色のみ変更の場合は比較的早く処理が終わりますが、
以下のコードのように背景色と文字色を変更しようとすると、
フリーズしたような感じになります。(待てば処理は終わるようです。)
以下のコードは、参考ページのコードに文字色設定行を追加したものです。

    Private Sub Find(ByVal browser As WebBrowser, ByVal str As String)
         Dim Doc As mshtml.HTMLDocument       'MSHTML.HTMLDocument  
         Dim Body As mshtml.HTMLBody      'MSHTML.HTMLBody  
         Dim Range As mshtml.IHTMLTxtRange  'MSHTML.IHTMLTxtRange  
         Dim BMK As String = ""

         '検索文字列を入れておいてください。  
         If String.IsNullOrEmpty(str) Then
             Return
         End If

         Doc = DirectCast(browser.Document.DomDocument, mshtml.IHTMLDocument2)
         Body = Doc.body
         Range = Body.createTextRange

         '≫≫≫≫≫ 検索開始  
         Do While Range.findText(str)
             '最初に見つかった位置を保存しておきます。  
             If String.IsNullOrEmpty(BMK) = 0 Then

             End If
             BMK = Range.getBookmark

             '検索した語句を黄色く反転させる。  
             Range.execCommand("BackColor"False"YELLOW")    '背景色の設定(元のコード) 
             Range.execCommand("ForeColor"False"RED")       '文字色の設定(追加) 

             '論理カーソル位置を、検索した語句の末尾に移動させる。  
             Range.collapse(False)
         Loop
         '≪≪≪≪≪ 検索終了  

         'ついでに、最初に見つけた語句の位置までスクロールさせています。  
         If Not String.IsNullOrEmpty(BMK) Then
             Range.moveToBookmark(BMK)
             Range.scrollIntoView()
         End If

         '最後は一応、後始末を。  
         Range = Nothing
         Body = Nothing
         Doc = Nothing
     End Sub


指定Rangeの背景色と文字色を同時変更したい場合はどうすればよいのでしょうか?