Stimmt - mein Vorschlag geht nur, wenn der Cursor in der richtigen Zeile steht - reicht für mein Programm - werde das aber noch mal verallgemeinern.
Hier ein allgemeingültiger Vorschlag:
der text eines Richedit könnte so aussehen:
01#13#10 (#13#10 nur zur veranschaulichung mitgeschrieben)
234#13#10
5678
Delphi-Quellcode:
function getcharcount(c:char;s:string):integer;
//zählt c in s
var p:pchar;
begin
result:=0;
p:=pchar(s);
while p^<>#0 do begin if p^=c then inc(result);inc(p)end;
end;
function getnewselstart(atext:string;apos:integer):integer;
var i:integer;
//atext: der Text von trichedit; apos: die gewünschte Position des Cursors in atext
begin
setlength(atext,apos); //kappen des textes bis zur gewünschten Position
result:=apos-getcharcount(#13,atext);//von dieser gewünschten Positon die Anzahl der darin enthaltenen Zeilenvorschübe abziehen
end;
procedure test;
var p:string;
begin
p:='7'
richedit1.SelStart:=getnewselstart(richedit1.Text,pos(p,richedit1.Text));
richedit1.sellength:=1;//damit mans auch sieht
end;
pos(p,richedit1.Text) ergibt 12;
für selstart ist
- in einem tmemo die Anzahl der Buchstaben (8) + 4 für den Zeilenvorschub macht selstart=12
- im neuen trichedit die Anzahl der Buchstaben (8) + 2 für den Zeilenvorschub macht selstart=10
markiert wird die 8 nunmehr auch im "neuen" trichedit