Sigo sin entender cabalmente porqué no te gusta SelText. Por ejemplo, si hacemos
Código Delphi
[-]
Memo1.Text := RichEdit1.SelText;
el memo tendrá el texto seleccionado en el richedit. ¿No basta eso? De hecho tendrá tantas líneas como tengas en la selección del richedit y puedes procesar las líneas del memo una a una con Memo.Lines.
Bueno, hay un punto a considerar. Si el richedit tiene su propiedad WordWrap en
false, lo que dije arriba parece ser cierto, pero si WordWrap es
true el concepto mismo de línea es relativo ya que depende del ajuste del texto según el tamaño del control. En este caso te peude servir el siguiente código:
Código Delphi
[-]
var
First, Last, I: Integer;
begin
with RichEdit1 do
begin
First := Perform(EM_LINEFROMCHAR, SelStart, 0);
Last := Perform(EM_LINEFROMCHAR, SelStart + SelLength, 0);
for I := First to Last do
Memo1.Lines.Add(Lines[i]);
end;
end;
EM_LINEFROMCHAR es un mensaje que se manda al control de edición para determinar el número de línea (basada en cero) que ocupa el caracter con índice especificado (segundo parámetro de Perform). En este caso, no importa el tamaño en que pongas el control, en Memo.Lines obtendrás las líneas que
ves en el richedit.
// Saludos