実に久しぶりでありますが。もういや、リッチエディットなんて大っ嫌い!
入力に伴う着色の変化に対する比較的簡潔な処理自体は書けてしまい、動作自体は満足の行くものとなった……しかし、美観と言う点では非常に損なっていると言わざるを得ないだろう。
リッチエディットでは、ある範囲内の書式属性を変更させるには、その文字列を選択しなければならないようだ。今の所、VCLのソースコードを追い掛け回しても、選択されている事を前提にした書き方しか見つけられないので、恐らくはWindows本来のリッチエディットコントロールの仕様であると考えられる。
従って、コンポーネント自身がテキストの書式属性を変更しようとすると、やはり自前でその範囲を選択しなければならない。それはそれで良いのだが、その動作が画面で出てしまうのだ……。特に大量のペーストを行うと、覿面に速度が低下してしまい、あまり納得の行く動作ではない。
一時的に表示の更新を停止すれば改善できるのだが、更新を再開するとOnChangeイベントが発生してしまう。動的着色への対応にはその流れを用いてしまっているので、OnChangeイベントを呼び出し合う無限ループが発生してしまうのである。
幾つかの回避策を考えてはあるのだが……いささか不安が多い。OnCHangeイベントを引き起こす動作は枚挙に暇が無く、いかにして調停するのか見当もつかない。
とりあえず、前述の情けない実装をご覧に入れましょう
バグでも見つけたら教えてね