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

Устранение ошибок при загрузке иконок в компонент TImage в Delphi

Delphi , Графика и Игры , Изображения

При работе с компонентом TImage в среде разработки Delphi иногда возникают ошибки, связанные с загрузкой иконок из ресурсов. В данной статье мы рассмотрим, как можно решить одну из таких проблем, связанную с функцией LoadIconWithScaleDown.

Проблема с загрузкой иконки

Пользователь столкнулся с проблемой, при которой код для загрузки иконки из ресурсов в компонент TImage не работал. Функция LoadIconWithScaleDown возвращала отрицательный код ошибки. В коде использовался следующий метод:

procedure TForm1.LoadResToImg(RID: String; const Img: TImage);
var
  Ico: TIcon;
  hI: HICON;
  HR: HResult;
begin
  Ico:= TIcon.Create;
  HR:= LoadIconWithScaleDown(HInstance, PChar(RID), Img.Width, Img.Height, hI);
  Ico.Handle:= hI;
  Img.Picture.Bitmap.Assign(Ico);
  Ico.Free;
end;

Возможные причины ошибки

Ошибка может быть связана с неправильной реализацией обертки функции в модуле Winapi.CommCtrl.pas. Также стоит отметить, что функция LoadIconWithScaleDown доступна только в операционных системах Windows Vista и новее.

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

Чтобы решить проблему, рекомендуется самостоятельно объявить функцию LoadIconWithScaleDown в коде:

function LoadIconWithScaleDown(hinst: HINST; pszName: LPCWSTR; cx, cy: Integer; var phico: HICON): HResult; stdcall; external 'ComCtl32';

Важно учесть, что данная функция не будет доступна на системах с версией Windows ниже Vista. В таком случае стоит использовать ключевое слово delayed для загрузки функции при необходимости, или использовать LoadLibrary и GetProcAddress для получения адреса функции.

Альтернативный подход

В качестве альтернативного решения можно использовать функцию InitCommonControlsEx перед вызовом LoadIconWithScaleDown. Это может быть полезно для корректной инициализации необходимых компонентов.

var
  IconHandle: HICON;
  ICC: TInitCommonControlsEx;
begin
  ICC.dwSize := SizeOf(TInitCommonControlsEx);
  ICC.dwICC := ICC_BAR_CLASSES;
  if not InitCommonControlsEx(ICC) then
    raise Exception.Create('InitCommonControlsEx error');
  if LoadIconWithScaleDown(0, MAKEINTRESOURCE(<your res id>), 32, 32, IconHandle) <> S_OK then
    raise Exception.Create('LoadIconWithScaleDown error');
  // Использование IconHandle по необходимости
end;

Заключение

При работе с иконками в Delphi важно учитывать версию операционной системы и корректно инициализировать необходимые компоненты. Следуя рекомендациям из этой статьи, вы сможете устранить ошибки при загрузке иконок в компонент TImage.

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

Устранение ошибок загрузки иконок в компонент TImage в Delphi может быть вызвано неправильной реализацией функции `LoadIconWithScaleDown` или несоответствием версии Windows, на которой она доступна.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Изображения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-11 10:38:17/0.0034260749816895/0