HTMLエディタを作る(4)(1999/03/18)

着色問題の続き。単純に>の後ろへの入力だけを問題とするならば、入力が反映される前にカーソル位置のアトビリュートを設定するだけで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が発生するようにした。



問題がこれで解決した訳ではない。例えば、>の上にキャレットを置いてDELなどを押下した場合、当然次のタグが閉じる部分まで色を変更しなければならないはず。

<FONT SIZE=+2> うふふふふ </FONT>

<FONT SIZE=+2 うふふふふ </FONT>

のように変色し、また、

<FONT SIZE=+2> でへへへへ </FONT>

<FONT SIZE=+2> でへへへへ /FONT>
ともならなければならない。

これについてはもう、真っ正直に範囲を調べてアトビリュートを設定するほかなさそうなのだが……