В процессе разработки на Delphi, особенно при работе с компонентами FMX, разработчики могут столкнуться с ошибкой EResNotFound. Это происходит, когда приложение пытается прочитать ресурс, который не был найден в модуле. В данном случае, проблема связана с использованием ресурсов в компоненте FMX в среде разработки Delphi XE7.
Проблема и Контекст
Разработчик добавил PNG-файлы в FMX-bpl (FmxComponents.bpl) через раздел "Resources and Images" в IDE XE7, что привело к созданию файла FmxComponents.dres, но не FmxComponents.res. При попытке обращения к ресурсу с помощью следующего кода:
возникала ошибка EResNotFound, поскольку ресурс ImgOptions не был найден. Попытки решения проблемы, в том числе использование информации из поста на Stack Overflow, не привели к успеху.
Альтернативный ответ
Анализируя ситуацию, можно предположить, что проблема может быть связана с неправильным указанием модуля, в котором должен быть найден ресурс. Первый параметр конструктора TResourceStream - это экземпляр модуля, в котором осуществляется поиск ресурсов. Если ресурсы действительно были правильно связаны, то возможно, что передавался неверный экземпляр модуля.
Также возможно, что ошибка связана с неправильным указанием типа или имени ресурса в процессе связывания. Для проверки следует использовать инструменты просмотра или редактирования ресурсов.
Подтвержденный ответ
Разработчик решил проблему, добавив директиву { $R FmxComponents.dres } в свой компонент. Он понял, что добавление этой директивы в файл пакета (dpk-file) недостаточно для связывания ресурсов с компонентом, и ресурсы должны быть явно указаны в коде.
Решение
Для корректного использования ресурсов в компоненте FMX в Delphi XE7, необходимо:
Убедиться, что ресурсы добавлены в соответствующий файл .dres через раздел "Resources and Images" в IDE.
В коде компонента добавить директиву включения ресурсов { $R Путь к файлу.dres }, где Путь к файлу.dres - это путь к файлу, содержащему ресурсы.
При обращении к ресурсу использовать правильный экземпляр модуля, в котором ресурс должен быть найден.
Проверить корректность типа и имени ресурса с помощью инструментов просмотра или редактирования ресурсов.
Пример кода
{$R FmxComponents.dres} // Пример директивы включения ресурсов
...
TResourceStream.Create(HInstance(TPmFmxTitelbar), 'ImgOptions', RT_RCDATA);
Следуя этим шагам, разработчики смогут избежать ошибки EResNotFound и успешно использовать ресурсы в своих проектах на Delphi XE7.
Вопрос связан с решением проблемы ошибки EResNotFound в Delphi XE7 при работе с ресурсами компонента FMX.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.