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

Исправление ошибки 'Out of system resources' в C++ Builder с использованием стилей VCL

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Обзор проблемы

Разработчики, использующие C++ Builder и работающие со стилями VCL, могут столкнуться с ошибкой "Out of system resources", которая возникает при использовании диалогов, таких как TOpenDialog или TSaveDialog, с включенными стилями VCL. Эта проблема особенно актуальна для версий C++ Builder 10 и 10.1 Professional и может проявляться на различных версиях операционной системы Windows.

Пример кода, вызывающего ошибку

Для воспроизведения ошибки необходимо создать форму VCL с использованием стилей, добавить на форму TComboBox, TButton и TOpenDialog. В обработчик события нажатия кнопки следует добавить следующий код:

OpenDialog1->Execute();
for(int i=0; i<100; i++)
  ComboBox1->Items->Add("test text");
ComboBox1->ItemIndex = 1;

После выполнения этой последовательности действий и выбора файла в диалоге, программа может упасть с ошибкой "Out of system resources".

Решение проблемы

После тщательного анализа и отладки было обнаружено, что ошибка возникает при вызове метода TBitmap::SetSize с отрицательным параметром для TComboBox, который использует стили VCL. В коде отладки видно следующее:

TComboBoxStyleHook::ListBoxWndProc
TComboBoxStyleHook::DrawListBoxVertScroll
TBitmap::SetHeight
TBitmap::SetSize

Для устранения ошибки был изменен метод SetSize в модуле Vcl.Graphics.pas таким образом, чтобы он выходил из выполнения при отрицательных параметрах. Это не устраняет причину возникновения отрицательного параметра в DrawListBoxVertScroll, но предотвращает возникновение исключения. Решение было протестировано на всех машинах, где ранее наблюдалась ошибка, и работало без сбоев.

Пример кода для изменения метода SetSize

// Внутри метода TBitmap::SetSize
if (NewWidth < 0 || NewHeight < 0) {
    // Возвращаем текущие размеры, если новые размеры отрицательные
    return;
}
// Остальная часть кода метода

Заключение

Пользователям, столкнувшимся с аналогичной проблемой, рекомендуется внести изменения в метод SetSize в соответствии с приведенным выше примером кода. Это временное решение, которое предотвращает возникновение исключения "Out of system resources" при работе с диалогами в C++ Builder с включенными стилями VCL. Обращение к специалистам по VCL, таким как Remy Lebeau, может помочь в дальнейшем понимании причин возникновения ошибки и разработке более надежного решения.

Создано по материалам из источника по ссылке.

и решение ошибки 'Out of system resources' в C++ Builder при использовании стилей VCL, с примером кода, вызывающим ошибку, и предложенным исправлением.


Комментарии и вопросы

Получайте свежие новости и обновления по 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 16:03:21/0.0036969184875488/0