var
gStart, gLength, gCol: Integer;
procedure SetRichEdit(aRichEdit: TRichEdit);
var
fRow, fCol: Integer;
fStart, fLength, tStart: Integer;
begin
fRow := aRichEdit.CaretPos.X;
fCol := aRichEdit.CaretPos.Y;
if gCol = fCol then Exit;
if aRichEdit.SelLength > 0 then Exit;
tStart := aRichEdit.SelStart;
fStart := tStart - fRow;
fLength := aRichEdit.Lines[fCol].Length;
aRichEdit.Lines.BeginUpdate;
if fLength > 0 then
begin
aRichEdit.SelStart := fStart;
aRichEdit.SelLength := fLength;
aRichEdit.SelAttributes.Color := clRed;
end;
if gLength > 0 then
begin
aRichEdit.SelStart := gStart;
aRichEdit.SelLength := gLength;
// aRichEdit.SelectAll;
aRichEdit.SelAttributes.Color := clBlack;
end;
aRichEdit.SelStart := tStart;
aRichEdit.SelLength := 0;
aRichEdit.Lines.EndUpdate;
gStart := fStart;
gLength := fLength;
gCol := fCol;
end;
procedure TForm1.RichEdit1Click(Sender: TObject);
begin
SetRichEdit(TRichEdit(Sender));
end;
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key in [37..40] then SetRichEdit(TRichEdit(Sender));
end;