Obtener la posición del cursor en un TRichEdit o Tmemo

Los controles TMemo y TRichEdit no disponen de propiedad ni método alguno que facilite la posición actual del cursor, por
lo que es preciso usar algunos mensajes específicos de estos controles enviándolos mediante la función SendMessage. En el
código siguiente, suponiendo que tenemos un control TRichEdit, un botón y tres controles Label en un formulario, puede ver
cómo se obtiene la línea, su longitud y la posición en la línea.

procedure TForm1.Button1Click(Sender: TObject);
var
        lpos,cpos,LineLenght:integer;
begin
        Lpos:=SendMessage(RichEdit1.handle, EM_LINEFROMCHAR, RichEdit1.Selstart, 0);
        CPos:= SendMessage(RichEdit1.handle, EM_LINEINDEX, lpOS, 0);
        LineLenght:=SendMessage(RichEdit1.HANDLE, em_linelength, CPos, 0);
        CPos:=RichEdit1.Selstart-CPos;

        label1.caption:=IntToStr(Lpos);
        label2.caption:=IntToStr(LineLenght);
        Label3.caption:=IntToStr(Cpos);
end;

Esta solución ha sido facilitada por José Deza.