При разработке компонентов на Delphi, зачастую возникает необходимость использования битмапов. В случае с кнопкой, которую пользователь не должен иметь возможность изменять, задача заключается в том, чтобы заранее задать изображение для компонента, а не предоставлять возможность выбора через свойство ImageList. Ошибка "Resource not found" может возникнуть при попытке доступа к ресурсу, который был добавлен в файл ресурсов, но не был корректно скомпилирован или загружен.
Шаги для Исправления Ошибки:
Создание файла ресурсов:
Сначала необходимо создать файл ресурсов myres.rc с указанием битмапа, который вы хотите включить в свой компонент:
rc
FIXED BITMAP "fixed.bmp"
Важно обратить внимание на тип ресурса - он должен быть BITMAP, а не BMP.
Компиляция файла ресурсов:
После создания файла ресурсов, необходимо его скомпилировать с помощью утилиты brcc32:
brcc32 myres.rc
Включение файла ресурсов в компонент:
В разделе implementation вашего компонента укажите путь к скомпилированному файлу ресурсов:
pascal
implementation
{$R .\resources\myres.res}
Доступ к ресурсу:
Для загрузки битмапа из ресурса используйте следующий код:
Здесь FindClassHInstance(MyComponent) обеспечивает корректный доступ к ресурсу, независимо от настроек проекта, в котором используется компонент.
Проверка корректности загрузки:
Если вы обнаружите, что ресурс загружается с именем "0", это может указывать на проблему с компиляцией файла ресурсов. Убедитесь, что формат битмапа соответствует стандарту (например, начинается с 'BM8').
Пример Кода:
unit MyButtonComponent;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.SysMenus, Vcl.Dialogs, Vcl.StdCtrls;
type
TMyButton = class(TSpeedButton)
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R .\resources\myres.res} // Подключение скомпилированного файла ресурсов
procedure TMyButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// Загрузка битмапа при создании компонента
Glyph.LoadFromResourceName(FindClassHInstance(Self), 'FIXED');
end;
initialization
// Здесь может быть код инициализации, если необходимо
end.
Заключение:
Используя вышеуказанные шаги, вы сможете исправить ошибку "Resource not found" и корректно загрузить битмап в свой компонент на Delphi. Обратите внимание на формат файла битмапа и правильность указания типов ресурсов в файле myres.rc.
Вопрос связан с исправлением ошибки 'Resource not Found' в программировании на Delphi при работе с битмапами, когда необходимо загрузить изображение для компонента без возможности его изменения пользователем.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.