Ich hab das jetzt so gelöst, dass ich die gesamte Länge des Textes ermittele und davon die Anzahl der Zeilenumbrüche abziehe. Diese Anzahl ermittle ich in einer Funktion, die das Vorkommen von #13 im gesamten Text zählt.
Wen der Code interessiert:
Delphi-Quellcode:
function TForm11.CountChar(const RichEdit: TRXRichEdit; s: string): integer;
//diese Funktion sucht in dem übergebenen RichEdit nach der Anzahl des gesuchten
//Zeichens
var I, x: integer;
MyText : string;
begin
x := 0;
MyText := RichEdit.Text;
for I := 0 to Length(MyText) do
begin
if MyText[i] = s then
Inc(x);
end;
Result := x;
end;
procedure TForm11.Button2Click(Sender: TObject);
var i, TxtLength : integer;
begin
//Testtext erzeugen
for I := 0 to 9 do
begin
RxRichEdit1.Lines.Add('Zeile ' + IntToStr(i));
end;
//bisher eingegebenen Text markieren
//über function CountChar werden alle Zeichen des Textes abzgl. des Zeichens für carriage-return (#13)
//ermittelt und das als Textlänge für SelLength übergeben
RxRichEdit1.SelStart := 0;
RxRichEdit1.SelLength := Length(RxRichEdit1.Text) - CountChar(RxRichEdit1,#13);
with RXRichEdit1.SelAttributes do Protected := true; //der bisher eingegebene Text ist jetzt schreibgeschützt
//Cursor in die nächste Zeile setzen
RxRichEdit1.SelStart := RxRichEdit1.SelLength + 1;
RxRichEdit1.SetFocus;
end;