Исправление ошибки EOutOfResources при работе с TRichEdit в C++Builder на Windows XPDelphi , Синтаксис , Текст и СтрокиВведениеПри работе с компонентами RichEdit в среде C++Builder на операционной системе Windows XP пользователи могут столкнуться с ошибкой EOutOfResources, которая проявляется при попытке вставки текста на кириллице. Эта проблема связана с ограничениями, встроенными в библиотеку RichEd32.dll, которая используется в Windows XP. Описание проблемыПри создании приложения на C++Builder с использованием TRichEdit для отображения отчетов на разных языках, в том числе и на русском, может возникнуть проблема с вставкой текста. Все работает корректно для западноевропейских языков, но при попытке добавить текст на кириллице приложение выбрасывает исключение EOutOfResources с сообщением об ошибке RichEdit line insertion error. Обычно такое исключение возникает, если текст превышает внутренний буфер RichEdit (64KB), но в данном случае проблема возникает даже при добавлении одного символа. Приложение не является Unicode, поэтому для отображения текста на кириллице необходимо менять кодовую страницу. Все остальные тексты, такие как меню и метки, отображаются корректно. Возможные причины ошибкиОшибка может быть связана с тем, что RTF ожидает, что любые символы за пределами 7-битного ASCII будут представлены в виде последовательностей escape. Это связано с особенностями кодирования в RTF. Подтвержденное решениеИсследования показали, что проблема связана именно с операционной системой Windows XP и её настройками локали. Ошибка не возникает, если операционная система настроена на использование конкретного языка. Проблема кроется в библиотеке RichEd32.dll, которая идет в комплекте с Windows XP. В библиотеке VCL, используемой в C++Builder и Delphi, есть ошибка, которая проявляется, когда первый символ строки, добавляемой в TRichEdit, является символом escape. Для исправления ситуации следует использовать следующий код для добавления строки:
Вместо:
Этот код необходимо выполнить один раз. После добавления текста в любой контрол RichEdit в приложении, все последующие вызовы метода ЗаключениеПри работе с TRichEdit в C++Builder на Windows XP важно учитывать особенности кодирования и поведения компонентов RichEdit. Использование предложенного кода позволит избежать ошибки EOutOfResources при вставке текста на кириллице. При использовании TRichEdit в C++Builder на Windows XP может возникнуть ошибка EOutOfResources при попытке вставки текста на кириллице из-за ограничений в библиотеке RichEd32.dll. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Текст и Строки ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |