投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/8/31 18:31:06
これが VB6 ではなく VB.NET であれば、文字単位の背景色指定を
とても簡単に書けるのですけれどね。
RichTextBox1.SelectionBackColor = Color.Yellow


VB6 にも SelBackColor プロパティなんてものが欲しいところですが、
残念ながら、その機能がカプセル化されていないため、
先述の API 頼りになってしまいます。


ですが一応 VB6 でも、API を使わずに背景色をセットする方法があります。

具体的には、SelRTF プロパティ(あるいは TextRTF プロパティ) で
示される RTF 文字列を、直接書き換えるという手法です。

RTF 文字列の仕様は下記を参照。
http://ja.wikipedia.org/wiki/Rich_Text_Format
https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxrtfex/411d0d58-49f7-496c-b8c3-5859b045f6cf

RTF で指定する場合は、たとえば {\f1\cb1\cf2 Sample Text} などのようにします。
\cb というのが背景色で、 \cf というのは文字色の指定です。
その後に続く番号は、カラーパレットのインデックスを表しています。
カラーパレットというのは、使用する色を
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red192\green192\blue192;}
などの形式で並べたものです。
ちなみに \f はフォントの番号であり、{\fonttbl } に対応しています。

といっても、直接 RTFを作りこむのは面倒ですので、プロパティから既知の RTF を取得した後で、
Replace 関数なり正規表現なりで、\cb を補ってから、プロパティに書き戻す形の実装で。