Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
WebBrowser上の文字の背景色・文字色を同時変更で時間がかかる
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30536#CommentId84173
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2020/9/8 16:00:10
あぁ、懐かしいコードが出てきましたね…。
でも移植内容がちょっと不自然。コメントと処理が合致していないようです。
> If String.IsNullOrEmpty(BMK) = 0 Then
>
> End If
> BMK = Range.getBookmark
IsNullOrEmpty の戻り値は Integer ではなく Boolean ですし、
そもそもこれでは、If 文が何の役目も果たしていません。
これの原文は私が 2000/06/30 に VB 系メーリングリストに投稿した
VB6 向けのコードなのですが、その当時は下記のように書いていたはずなんですよね。
> '検索文字列を入れておいてください。
> If Len(Text1.Text) = 0 Then Exit Sub
>
> Set Doc = WebBrowser1.Document
> Set Body = Doc.Body
> Set objRange = Body.createTextRange
>
> '≫≫≫≫≫ 検索開始
> Do While objRange.findText(Text1.Text)
> '最初に見つかった位置を保存しておきます。
> If Len(BMK) = 0 Then BMK = objRange.getBookmark
>
> '検索した語句を黄色く反転させる。
> objRange.execCommand "BackColor", False, "YELLOW"
>
> '論理カーソル位置を、検索した語句の末尾に移動させる。
> objRange.collapse False
> Loop
> '≪≪≪≪≪ 検索終了
>
> 'ついでに、最初に見つけた語句の位置までスクロールさせています。
> If Len(BMK) Then
> objRange.moveToBookmark BMK
> objRange.scrollIntoView
> End If
>
> '最後は一応、後始末を。
> Set objRange = Nothing
> Set Body = Nothing
> Set Doc = Nothing
>
なお、.createTextRange や .getBookmark はプロパティではなくメソッドなので、
本来は .createTextRange() や .getBookmark() と書いた方が望ましいです。
> なぜこれだけで処理速度が改善したのかはさっぱり分かりません。
うぅむ、何故でしょうね。
順番を入れ替えた場合、outerHTML の内容が微妙に違っていたりはしますか?
とりあえず実験。短めのコンテンツなので速度検証はしておりませんが、
順番を入れ替えても HTML の内容に差は生じていませんでした。
コンテンツの内容や互換モードの設定、IHTMLTxtRange の範囲にもよるのかな。
1⃣ 【原文】XHTML 1.1 で書かれたコンテンツ
<div style="background-Color:green">
<label for="U"><font color="white">ログインID</font></label>
<input id="U" name="U" size="18" value="" />
</div>
2⃣ [1] に対して、"ログイン" の BackColor を Red にした場合。
<div style="background-Color:green">
<label for="U">
<font color="white">
<FONT style="BACKGROUND-COLOR: red">ログイン</FONT>
ID
</font>
</label>
<input id="U" name="U" size="18" value="">
</div>
3⃣ [1] に対して、"ログイン" の ForeColor を Blue にした場合。
<div style="background-Color:green">
<label for="U">
<font color="white">
<FONT color="blue">ログイン</FONT>
ID
</font>
</label>
<input id="U" name="U" size="18" value="">
</div>
4⃣ [2] に対して、ForeColor を Blue にした場合と、
[3] に対して、BackColor を Red にした場合の結果は同じだった。
<div style="background-Color:green">
<label for="U">
<font color="white">
<FONT style="BACKGROUND-COLOR: red" color="blue">ログイン</FONT>
ID
</font>
</label>
<input id="U" name="U" size="18" value="">
</div>