Подгружение иконок с *.ехе файлов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

xpymep
Сообщения: 53
Зарегистрирован: 08 дек 2004, 21:42
Контактная информация:

Задача:"Показать иконку на форме зная, только путь к *.exe файлу"
Я себе представляю это так(C++ Builder):

Код: Выделить всё

void* ic = LoadLibrary("some.exe");
 if (ic!=NULL)
  { 
   TIcon *icon = new TIcon();
    HICON _i;
    _i = LoadIcon(ic,IDI_APPLICATION)
      if (_i!=NULL)
         {
            icon->Handle = _i;
         }
   }
К сожалению этот код не пашет... :( . Как быть ? Помогите пожалуйста.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

IDI_APPLICATION - это идентификатор системной иконки. При вызове LoadIcon для системных иконок, HINSTANCE процесса должен равняться NULL.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
xpymep
Сообщения: 53
Зарегистрирован: 08 дек 2004, 21:42
Контактная информация:

Все равно не пашет... :(
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Код: Выделить всё

HICON hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
Не пашет? Т.е. hIcon равняется нулю? Или что?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Попробуй LoadFromResourceName(NULL, MAKEINTRESOURCE(IDI_APPLICATION))
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Define IDI_APPLICATION уже учитывает макрос MAKEINTRESOURCE.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Romeo, ты прав. Просто BCB по идее мог его переопределить как числовой. В windows.h он тоже объявлен по-разному, в зависимости от контекста.
xpymep
Сообщения: 53
Зарегистрирован: 08 дек 2004, 21:42
Контактная информация:

Romeo, Да равен NULL.
LoadFromResourceName(); первый параметр это деструктор окна?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Деструктор? :) Тяжёлый случай, господин xpymep, читайте литературу - не владеете терминологией. Первый параметр - инстанс (instance) приложения.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Hawk
Сообщения: 216
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

В данном случае как мне кажется надо использовать SHGetFileInfo с флагом SHGFI_ICON
Ответить