Позиция курсора в TRichEdit

Так как вопрос давольно часто поднимается в форумах, то хотелось бы привести ответ на него. Итак, как же получить текущие координаты курсора (Row и Col) в TRichEdit ?

Вот пример решения данной проблемы:

Procedure
 TForm1.GetPosition(Sender: TRichEdit);
var

  iX,iY  : Integer;
  TheRichEdit : TRichEdit;
begin

  iX := 0
; iY := 0;
  TheRichEdit := TRichEdit(Sender);
  iY := SendMessage(TheRichEdit.Handle, EM_LINEFROMCHAR, TheRichEdit.SelStart,
  0
);
  iX := TheRichEdit.SelStart - SendMessage(TheRichEdit.Handle, EM_LINEINDEX,
  iY, 0
);
  Panel1.Caption := IntToStr(iY + 1
) + ':' + IntToStr(iX + 1) ;
end
;

procedure
 TForm1.RichEditMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

  GetPosition(RichEdit);
end
;

procedure
 TForm1.RichEditKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  GetPosition(RichEdit);
end
;