リッチテキストでの文字ごとの背景色指定するには?

解決


賭博アルプス王ハイジ  2005-04-03 22:50:51  No: 14105

BCB6.0を使っています。(Delphiもちょっと使っています)
リッチテキストでの文字ごとの背景色指定をしたくて悩んでいます。

TRichEditではSelAttributesで、文字自体の色は指定できますが、文字ごとの背景色は指定できません。
ネットで検索すると、この手の質問がちらほらありますが、たいていはそんな機能はないのでフリーのコンポーネントを使え、という返事が多いです。
私もそう思ってあきらめていたのですが、先日BCBのTRichEditに、ワードで書いた背景色つきの文章をペーストできることを発見しました。そこで、もう一度詳しく調べてみると、リッチテキストのver1(RICHED32.DLL)ではだめですが、ver2以降(RICHED20.DLL)ではとっくに可能になっているようです。
BCB6が新しいrich edit controlを使っているなら、APIを使えばできそうな気がします。ということでSendMessageとEM_SETCHARFORMATあたりを使ってがんばってみましたが、どうにもうまくいきません。

もし、BCBまたはDelphiで、APIを使って文字個別に背景色を設定したことがある方がいらっしゃいましたら、教えていただけませんでしょうか?


賭博きらい  2005-04-04 00:27:14  No: 14106

BCBなら、ここかな?
文字の背景色を文字単位で設定出来るのはWin2000,WinXPなどで、Win9X系ではダメ。
http://www24.cds.ne.jp/~neg/pro/piyo1/crec/backcolor.html


賭博アルプス王ハイジ  URL  2005-04-04 00:59:30  No: 14107

そうなんですよ、CHARFORMAT2の使い方についても何度やってもだめだったんです。
で、教えていただいたページを参考にして、やっとうまくいきました。
BCB6では、実際には以下のような感じに微調整しました。

  Richedit::CHARFORMAT2 cf2;
  cf2.cbSize=sizeof(cf2);
  SendMessage(RichEdit1->Handle,EM_GETCHARFORMAT,1,(LPARAM)&cf2);
  cf2.dwMask=CFM_COLOR|CFM_BACKCOLOR;
  cf2.dwEffects=0;
  cf2.crTextColor=RGB(0,0,0xff);
  cf2.crBackColor=RGB(0xff,0,0);
  SendMessage(RichEdit1->Handle,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&cf2);

賭博きらいさん、速攻レスで教えていただいてありがとうございました。


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

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






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