Moin Sharky,
nein, ist nicht falsch, da ja hier der Endpunkt der Markierung berechnet wird, nicht die Länge.
Das Prinzip ist das gleiche, als hätte man einen Startoffset, an dem man etwas speichert. Um jetzt die nächste freie Position zu berechnen, addiert man auf den StartOffset die Länge dessen, was man gespeichert hat drauf. Da hier aber nicht die nächste freie Stelle benötigt wird, sondern die letzte belegte wird eins abgezogen.
Beispiel
SelStart = 5
Length = 4
SelEnd = 5 + 4 - 1 = 8
Es werden die Stellen 5,6,7 und 8 markiert also 4, was der Länge entspricht.
Ist zwar nur ein konkretes Beispiel und keine mathematischer Beweis, sollte aber für diese Berechnung genügen, denke ich.
@Citybreaker:
Warum das bei Dir jetzt nicht funktioniert kann ich mir nicht erklären.
Du könntest ggf. mal den Sourcecode hier anhängen, dann kann ich mir das mal komplett ansehen.
Ansonsten könntest Du es auch noch einmal so versuchen:
Delphi-Quellcode:
iPos := pos(trim(Edit1.Text), SynMemo.Text);
if iPos = 0 then exit;
SynMemo.SelStart := iPos-1;
SynMemo.SelEnd := SynMemo.SelStart+length(trim(Edit1.Text))-1;