高亮 TRichEdit 当前行

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;

Original: https://www.cnblogs.com/del/p/3999780.html
Author: 万一
Title: 高亮 TRichEdit 当前行

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547661/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球