着色問題の続き。単純に>の後ろへの入力だけを問題とするならば、入力が反映される前にカーソル位置のアトビリュートを設定するだけでOKだと判明。
procedure TfrmEditor.EditorProtectChange( Sender:TObject; StartPos,EndPos:Integer; var AllowChange:Boolean );
begin
AllowChange := True; // デフォルトで変更を許可
if (StartPos=EndPos) then
begin
// 文章が未選択
if (Editor.Text[StartPos]='>') then
begin
Editor.SelAttributes.Color := clBlack;
Editor.SelAttributes.Style := [];
end;
end;
end;
OnProtectChangeイベントでないと「変更前の修正」が出来ない事に注意。OnCHangeイベントは変更された後なので遅いのだ。但しOnProtectChangeイベントはアトビリュートのプロテクトが有効になっている部分の修正について発生するので、予め全体を設定しておく必要が在る。
ここでは、Createイベント中で
Editor.DefAttributes.Protected := True;
という一文を実行しておく事で常にOnProtectChangeが発生するようにした。
<FONT SIZE=+2>
うふふふふ
</FONT>
が
<FONT SIZE=+2
うふふふふ
</FONT>
のように変色し、また、
<FONT SIZE=+2>
でへへへへ
</FONT>
が
<FONT SIZE=+2>
でへへへへ
/FONT>
ともならなければならない。
これについてはもう、真っ正直に範囲を調べてアトビリュートを設定するほかなさそうなのだが……