TRichEdit добавляет пустые строки при изменении wordwrap (любое свойство пересоздания)

Следующее было найдено в Embarcardero RAD Studio 10.2. Я не смотрел другие версии.

Если у тебя есть TRichEdit в вашей форме, которая содержит существующий текст (более 1021 символов), и измените WordWrap (или любое другое окно воссоздания), тогда компонент будет иногда вставлять дополнительные пустые строки в середине вашего существующего текста. Похоже, это зависит от того, где приземляются персонажи CR/LF.

Чтобы продемонстрировать проблему, вставьте следующий текст в Lines свойство TRichEdit на форме в Delphi:

01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx78
02xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
03xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
04xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
05xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
06xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
07xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
08xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
09xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
11x456789012345678901234567890123456789012345678901234567890123456789012345678
12xxxxxxx1xxxxxxxxx2xxxxxxxxx3xxxxxxxxx4xxxxxxxxx5xxxxxxxxx6xxxxxxxxx7xxxxxxxx
13x4567890123456789012345678901234567890123456789012345678901
x

Цель приведенного выше примера текста состоит в том, чтобы иметь 1024 символа (считая CR/LF в конце предыдущих строк), когда вы доберетесь до последней строки (сам символ 'x'). Что будет после, не имеет значения.

Теперь, с вышеуказанным текстом в вашем TRichEditи все еще в режиме разработки, переключите WordWrap собственность несколько раз. (То же самое должно произойти, если вы настроите свою форму на выполнение во время выполнения.) Если ваш Delphi делает то же самое, что и моя, последняя строка ("x" сама по себе) начнет отделяться от предыдущих строк как новая строки вставлены.

Если вы измените длину 13-й строки - добавьте или удалите только один символ - проблема, похоже, исчезнет.

Я говорю "кажется, уходит", потому что позиция 1022/1023 для CR/LF - не единственные чувствительные позиции. Я нашел больше дальше (при игре с большим текстом), но не всегда на границах 1k (я думаю, не изучен в деталях).

Я нашел проблему с WordWrap, но это происходит с любым из свойств, которые воссоздают дескриптор окна (я думаю) - конечно BorderStyle делает то же самое.

Кто-нибудь еще видел это? Это слишком много, чтобы спросить, может ли кто-нибудь попробовать вышеуказанный тест в Delphi 10.3, чтобы увидеть, если он исправлен?

Вероятно, единственное надежное исправление (если 10.3 это не исправляет) - это избегать использования TRichEditили - и это мой следующий шаг для тестирования проблемы - создать и использовать деривацию, которая вставляет код для сохранения и восстановления контента во время воссоздания дескриптора. Есть другие идеи?

ОБНОВЛЕНИЕ Во время выполнения проблема возникает, только если PlainText свойство это правда. Во время разработки случается, является ли это свойство истинным или нет.

0 ответов

Другие вопросы по тегам