TRichEdit добавляет пустые строки при изменении wordwrap (любое свойство пересоздания) - PullRequest
0 голосов
/ 02 мая 2018

Следующее было найдено в 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 имеет значение true. Во время разработки происходит, является ли это свойство истинным или нет.

...