Увеличить размер / ограничение TRichEdit?

#delphi #paste #trichedit

#delphi #вставить #trichedit

Вопрос:

У меня возникли некоторые проблемы с TRichEdit.

Первая проблема заключается в том, что если я пытаюсь вставить много текста из буфера обмена в пустой TRichEdit, он обрезает нижнюю часть текста.

Вторая проблема, которая, я полагаю, связана с первой проблемой, заключается в том, что я, похоже, ограничен количеством символов, которые может отображать TRichEdit, следовательно, вставка из буфера обмена приводит к потере части данных.

Если я вставлю в TJvRichEdit (Jedi), это будет работать нормально, очевидно, потому что это совершенно другой компонент.

На данный момент мне хотелось бы найти решение для TRichEdit, потому что я использую много процедур / функций и т.д., Если я перейду на другой класс расширенного редактирования, мне придется отредактировать большую часть моего кода, чтобы он работал.

Итак, в основном я спрашиваю:

  • Есть ли ограничение в TRichEdit? которое, я уверен, есть.
  • Как я могу увеличить ограничение TRichEdit, чтобы принимать больше символов и строк и т.д.

Пожалуйста, предоставьте совет / решение только для TRichEdit.

Редактировать

неважно, нашел ответ, используя:

 RichEdit11.MaxLength := $7FFFFFF0;
  

Ответ №1:

Цитирую ответ, данный Дэвидом Пейтом из групп новостей:

Следующие замечания применимы к версиям Delphi, которые используют элемент управления Windows Richedit версии 1. Я понимаю, что это включает в себя все версии Delphi до версии 7. (Я не знаю, какова ситуация, когда вы запускаете программы, скомпилированные в этих версиях, в различных версиях Windows NT / 2000, хотя Windows XP ведет себя так, как описано.)

В. Каков предел объема текста, который может вместить Richedit? A. Файлы справки (справка Delphi и Win32 SDK) сбивают с толку, противоречивы и некорректны в этом пункте. Необходимо учитывать 5 ограничений

  1. Максимальная емкость: «жестко установленный» предел, то есть максимальный размер текстового буфера RichEdit. Это на 2 байта меньше, чем 2 Гб. Обратите внимание, что это теоретический предел; на практике предел будет определяться объемом памяти вашего компьютера.

  2. Емкость: фактический размер текущего буфера. По умолчанию это 64 КБ, но размер может быть изменен несколькими способами.

  3. «Ограничение клавиатуры»: предел, за которым символы не могут быть добавлены при вводе с клавиатуры. Оно часто отличается от емкости, но, как и емкость, оно по умолчанию равно 64 КБ и может быть изменено несколькими способами.

  4. Свойство MaxLength объекта TRichEdit. Значение по умолчанию 0 устанавливает как емкость, так и «Ограничение клавиатуры» на 64 КБ.

  5. Ограничение на количество строк: теоретически это около 134 миллионов, но на практике вы можете рассчитывать получить намного меньше этого. Максимальное количество строк, по-видимому, зависит от нескольких факторов, включая объем доступной памяти и среднюю длину строк. Я обнаружил, что могу получить от 150 до 200 тысяч строк. Также обратите внимание, что сообщалось, что некоторые версии элемента управления Windows 95 Richedit иногда выдают исключение при добавлении более нескольких сотен строк. Похоже, это связано с ошибкой в элементе управления и было исправлено в более поздних версиях..

Вопрос: Как я могу увеличить объем текста, который может вместить TRichEdit?

A. Когда вы добавляете текст программно, размер как емкости, так и «Предела клавиатуры» изменяется в соответствии с добавляемым текстом. Под добавлением текста программно я подразумеваю использование любого из методов Add, Append, AddStrings или Assign TRichEdit.Свойство Lines или методы LoadFromFile, LoadFromStream или SetTextBuf TRichEdit. Обратите внимание, что добавление текста таким образом не приводит к обновлению свойства MaxLength.

B. С помощью свойства MaxLength. Это устанавливает «Ограничение клавиатуры» на значение, переданное в MaxLength . Это также увеличивает емкость до «Предела клавиатуры», если существующая емкость меньше максимальной длины. Обратите внимание, что вы не можете использовать MaxLength для уменьшения емкости и что изменение MaxLength не имеет эффекта, если переданное значение меньше длины текста, находящегося в данный момент в элементе управления. Чтобы увеличить емкость и «Ограничение клавиатуры» до одного и того же значения, установите TRichEdit.MaxLength на желаемое значение. Чтобы задать максимальный размер в инспекторе объектов, используйте значение 2147483645 ($7FFFFFFD). Чтобы установить это программно, проще использовать .MaxLength := System.MaxInt-2;. Сообщения EM_LIMITTEXT и EM_EXLIMITTEXT также могут использоваться для изменения «Ограничения клавиатуры» и емкости, но обычно я бы не рекомендовал их использовать, поскольку в противном случае вы не будете обновлять свойство MaxLength .