[Решено] RichMemo: PosEx и SelStart

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 17:49:42

Понадобилось мне тут соорудить поиск текста в RichMemo и столкнулся я с неожиданным (для меня) эффектом.
Оказалось, что позиция в 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 считаются отдельно).

Костыли:
Переводить значения, считая количество строк и их длину.

Вопрос: Может, как-то можно не так коряво?
Последний раз редактировалось kotompazb 15.11.2015 22:31:04, всего редактировалось 1 раз.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение vitaly_l » 14.11.2015 18:33:59

ответ = в разных кодировках результат берёте.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 19:30:38

vitaly_l писал(а):ответ = в разных кодировках результат берёте.

Да. Точно. Utf8Pos значит надо мне. Щас буду пробовать.

Добавлено спустя 12 минут 46 секунд:
Что-то, видимо, я не так понял, ибо результат одинаковый.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение vitaly_l » 14.11.2015 20:07:54

kotompazb писал(а):ибо результат одинаковый.

просто pos без utf8
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 20:19:32

Просто Pos не позволяет задать смещение, поэтому и использовал PosEx.
Тогда я не смогу задать, откуда искать, либо придется делать поиск в копии части текста.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение скалогрыз » 14.11.2015 23:07:00

kotompazb писал(а):Вопрос: Может, как-то можно не так коряво?

разница объясняется тем, что RichMemo (и его SelStart) в частности считает символ переноса за 1 символ (LF).
В то время, как .Text может возвращать перенос строки на Винде, как 2 символа (CRLF).
Pos или PosEx совершенно ни при чём :)

в одной из последних ревизий RichMemo эта разница, вроде бы, была убрана (т.е. даже .text вернёт LF для переноса строки).
Какой у тебя richmemo?

кстати, в самом RichMemo есть метод Search.
Подразумевается, что он работает более экономно с точки зрения памяти.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 23:19:15

скалогрыз писал(а):разница объясняется тем, что RichMemo (и его SelStart) в частности считает символ переноса за 1 символ (LF).
В то время, как .Text может возвращать перенос строки на Винде, как 2 символа (CRLF).
Pos или PosEx совершенно ни при чём

Вот я об этом же в первом посте и писал.
скалогрыз писал(а):в одной из последних ревизий RichMemo эта разница, вроде бы, была убрана (т.е. даже .text вернёт LF для переноса строки).
Какой у тебя richmemo?

1.0 однако.
скалогрыз писал(а):кстати, в самом RichMemo есть метод Search.
Подразумевается, что он работает более экономно с точки зрения памяти.

А вот насчет этого я не в курсе был. Щас посмотрю.

Спасибо.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение скалогрыз » 14.11.2015 23:23:14

kotompazb писал(а):1.0 однако.

ну как бы - не самая лучшая версия, с кучей особенностей. Возьми лучше trunk!

Добавлено спустя 34 секунды:
kotompazb писал(а):А вот насчет этого я не в курсе был. Щас посмотрю.

в 1.0 этого метода нет.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 23:27:48

скалогрыз писал(а):в 1.0 этого метода нет.

Ага. Уже заметил.
скалогрыз писал(а):Возьми лучше trunk!

А где? :)
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение скалогрыз » 14.11.2015 23:37:40

kotompazb писал(а):А где?

Вот тут пара ссылок по вкусу!
т.е. можешь или архив взять с исходниками либо через свн
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 14.11.2015 23:40:10

Ну через свн мне качать нечем (не умею), а по файликам нервы сдадут.
Поэтому архив.
Еще раз спасибо.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: RichMemo: PosEx и SelStart

Сообщение скалогрыз » 14.11.2015 23:57:51

kotompazb писал(а):Ну через свн мне качать нечем (не умею)

хм а git умеешь?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: RichMemo: PosEx и SelStart

Сообщение kotompazb » 15.11.2015 00:23:36

скалогрыз писал(а):хм а git умеешь?

неа. ну просто не было необходимости. я просто стараюсь пользоваться только тем, что есть "искаропки". В данном случае мне просто очень лениво было придумывать, как раскрасить текст самому. Да и вряд ли бы придумал. А надо.

Добавлено спустя 22 часа 6 минут 49 секунд:
Ну собственно проблема с поиском, которая породила тему, решилась (спасибо автору) с помощью метода Search минут за 5.
Всем спасибо.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 236

Рейтинг@Mail.ru