Оказалось, что позиция в Text RichMemo, найденная PosEx, не соответствует позиции того же символа для SelStart (больше на число предшествующих строк).
Например для текста:
- Код: Выделить всё
1
2
3
4
5
test
PosEx('test',RichMemo1.text,1)=16,
а чтобы выделить это слово, надо установить RichMemo1.SelStart:=10;
То есть, SelStart:=PosEx('test',RichMemo1.text,1)-LinesNum-1;//-1 потому что с 0
где LinesNum - число строк (переводов строки) до найденного слова.
То есть получается так:
Длина строк 1..5 = 1 - не учитывается перевод строки,
Для SelStart перевод строки - это 1 символ,
Для PosEx перевод строки - 2 символа (насколько я понял, и #13, и #10 считаются отдельно).
Костыли:
Переводить значения, считая количество строк и их длину.
Вопрос: Может, как-то можно не так коряво?