RichEdit.SelStart устанавливается со смещением

superstorm
Дата: 10.05.2011 17:50:54
Заметил странную вещь с RichEdit.

Если я делаю
RichEdit.SelStart:=PosEx('пример',RichEdit.Text,i);
далее устанавливаю длину выделения
RichEdit.SetLength:=Length('пример');
и применяю скажем Color, то выделяется и обрабатывается вовсе не 'пример', а ' приме' или ' прим' или ' пр' или еще что-то в этом роде.
Короче не то что надо, а со смещением влево. Причем если я выведу
Copy(RichEdit.Text,PosEx('пример',RichEdit.Text,i),Length('пример'));
то мне выдаст то что надо - 'пример'.

Смещение это увеличивается с увеличением числа строк в RichEdit'е! Я сначала погрешил на невидимый возврат кареты #13#10 (что в принципе бред и не должно влиять), и сделал так чтобы для SelStart'а отнималось по одному символу, умноженному на номер строки. Это вроде бы сработало. Но как выяснилось не везде. Ниже по тексту, начиная с 10-й строки начали появляться другие смещения, не поддающиеся логике (то еще сильнее, то как обычно). Ошибки в коде нет, я всё сверял, делая Copy текста. Copy показывает что надо, а SelStart - смещен.

В общем, что-то здесь не то. Я что-то упускаю?
Мимопроходящий
Дата: 10.05.2011 17:55:18

Hello, superstorm!
You wrote on 10 мая 2011 г. 14:50:54:

superstorm
> Если я делаю
> RichEdit.SelStart:=PosEx('пример',RichEdit.Text,i);

а зачем ты так делаешь?
кто такой PosEx?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

superstorm
Дата: 10.05.2011 18:21:38
Мимопроходящий
а зачем ты так делаешь?
кто такой PosEx?

Обычная функция нахождения подстроки (модуль StrUtils). Привык ею пользоваться. А что, она тут не корректно работает что ли?

function PosEx(const SubStr: string; const S: string; Offset: Integer = $1): Integer; overload;

Returns the index value of a substring.

PosEx returns the index of SubStr in S, beginning the search at Offset. If Offset is 1 (default), PosEx is equivalent to Pos.
PosEx returns 0 if SubStr is not found, if Offset is greater than the length of S, or if Offset is less than 1.
Мимопроходящий
Дата: 10.05.2011 18:28:29

Hello, superstorm!
You wrote on 10 мая 2011 г. 15:21:38:

superstorm
> Обычная функция нахождения подстроки (модуль
StrUtils). Привык ею пользоваться. А что, она тут не корректно работает
что ли?

В данном сочетании - очень даже может быть.
Почему бы не использовать родной метод FindText() ?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

superstorm
Дата: 10.05.2011 18:43:17
Мимопроходящий
В данном сочетании - очень даже может быть.
Почему бы не использовать родной метод FindText() ?

Похоже, Вы правы. Заменил FindText'ом и вроде всё работает как положено. Спасибо :)