При переходе с 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?