Разработчики, использующие C++ Builder и работающие со стилями VCL, могут столкнуться с ошибкой "Out of system resources", которая возникает при использовании диалогов, таких как TOpenDialog или TSaveDialog, с включенными стилями VCL. Эта проблема особенно актуальна для версий C++ Builder 10 и 10.1 Professional и может проявляться на различных версиях операционной системы Windows.
Пример кода, вызывающего ошибку
Для воспроизведения ошибки необходимо создать форму VCL с использованием стилей, добавить на форму TComboBox, TButton и TOpenDialog. В обработчик события нажатия кнопки следует добавить следующий код:
После выполнения этой последовательности действий и выбора файла в диалоге, программа может упасть с ошибкой "Out of system resources".
Решение проблемы
После тщательного анализа и отладки было обнаружено, что ошибка возникает при вызове метода TBitmap::SetSize с отрицательным параметром для TComboBox, который использует стили VCL. В коде отладки видно следующее:
Для устранения ошибки был изменен метод 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.