Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки EOutOfResources при работе с TRichEdit в C++Builder на Windows XP

Delphi , Синтаксис , Текст и Строки

Введение

При работе с компонентами 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. Для исправления ситуации следует использовать следующий код для добавления строки:

AnsiString TextToAdd;
TextToAdd = "пример"; // Русский текст 'пример'
RichEdit1->SelStart = RichEdit1->Text.Length();
RichEdit1->SelText = TextToAdd + "\r\n";

Вместо:

RichEdit1->Lines->Add( TextToAdd );

Этот код необходимо выполнить один раз. После добавления текста в любой контрол RichEdit в приложении, все последующие вызовы метода Lines->Add() будут выполняться без выброса исключения.

Заключение

При работе с 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
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 09:01:08/0.0033798217773438/0