При переходе с Delphi 2006 на Delphi XE2 одна из вещей, которые мы узнали, заключается в том, что RichEdit 2.0 заменяет внутренние пары CRLF
одним символом CR
. Это приводит к неудачному эффекту отбрасывания всех вычислений индекса символов на основе фактической текстовой строки на стороне VCL.
Поведение, которое я вижу, отслеживая код VCL, выглядит следующим образом:
- Отправка сообщения
WM_GETTEXT
(сделано вTControl.GetTextBuf
) возвращает текстовый буфер, содержащий парыCRLF
. - Отправка сообщения
WM_GETTEXTLENGTH
(сделано вTControl.GetTextLen
) вернет значение, как если бы текст по-прежнему содержал символыCRLF
. - В отличие от этого отправка сообщения
EM_SETSELEX
(т.е. установкаSelStart
) будет обрабатывать входное значение, как если бы текст содержал только символыCR
.
Это приводит к сбою всех видов (например, подсветка синтаксиса) в нашем приложении. Как вы можете сказать, все отключено ровно одним символом для каждой новой строки до этой точки.
Очевидно, что, поскольку это противоречивое поведение, мы должны что-то пропускать или делать что-то очень неправильное.
Есть ли у кого-нибудь еще опыт перехода от RichEdit 1.0 к элементу управления RichEdit 2.0 и как вы решили эту проблему? Наконец, есть ли способ заставить RichEdit 2.0 использовать пары CRLF
так же, как RichEdit 1.0?