Вопрос, заданный пользователем, связан с проблемой, когда при попытке использования нового компонента в дизайне формы в среде разработки Delphi возникает ошибка "Resource not found". Компонент основан на sAlphaButton и имеет свойство ImageList, а также расширенные изображения и подписи, переведенные на венгерский язык. Для загрузки изображений используется функция LoadRes. Компонент работает корректно, когда используется в коде, но при регистрации и попытке поместить его на форму возникает указанная ошибка.
Пример кода компонента
Код компонента включает процедуры LoadAsImageListFromRes и LoadResToImageList, которые загружают изображения из ресурсов. Конструктор TScrollPNGButton.Create инициализирует ImageList и загружает ресурсы при создании компонента.
procedure TScrollPNGButton.LoadAsImageListFromRes(ResNames : TStrings; IL : TsAlphaImageList);
var
s : string;
i : integer;
begin
IL.Clear;
for i := 0 to ResNames.Count - 1 do begin
s := ResNames[i];
AddImageFromRes(hInstance, IL, s, ifPNG);
end;
end;
procedure TScrollPNGButton.LoadResToImageList;
var
sl : TStringList;
begin
sl := TStringList.Create;
try
sl.Text := ...; // Список имен ресурсов
LoadAsImageListFromRes(sl, FImgs);
finally
sl.Free;
end;
end;
constructor TScrollPNGButton.Create(aOwner : TComponent);
begin
inherited Create(aOwner);
FImgs := TsAlphaImageList.Create(nil);
inherited Images := FImgs;
LoadResToImageList;
end;
Описание проблемы
При использовании компонента в дизайне формы в среде Delphi появляется ошибка, указывающая на отсутствие ресурса scrollpngbutton_ok. Пользователь уточняет, что при работе с кодом компонент функционирует корректно, и предполагает, что проблема может быть связана с неудачной регистрацией или созданием компонента.
Альтернативное решение
Пользователь упоминает, что может использовать метод Loaded для установки изображений в дизайне, но этот метод не вызывается во время выполнения программы.
Комментарии и дополнительная информация
В комментариях упоминается, что TsAlphaButton - это компонент из библиотеки AlphaSkin, и проблема может быть связана с использованием hInstance, которое не соответствует hInstance пользователя. После исправления кода ошибка исчезает.
Подтвержденный ответ
В ответе подтверждается, что использование директивы {$R *.res} не является правильным решением. Создание собственного файла ресурсов (YourResources.rc) и его компиляция (или использование IDE для этого, если используется Delphi 7 или более поздняя версия) является правильным подходом.
{$R YourResources.res YourResources.rc}
В файле YourResources.rc необходимо указать ресурсы, которые будут использоваться компонентом.
При работе с компонентами в Delphi, особенно когда они используют ресурсы, важно правильно их загружать и обращаться с hInstance. Создание и правильное использование файла ресурсов является ключом к успешной интеграции компонентов в дизайне формы и их корректной работе в коде.
Проблема связана с некорректной регистрацией и использованием ресурсов компонента в среде разработки Delphi, что приводит к ошибке 'Resource not found' при попытке использовать его в дизайне формы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.