Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Номер иконки в Dll или Exe файле больше их количества [D5, Win95/98, Win2k]


Nickolay ©   (2002-06-06 18:28:00) 

Здравствуйте,
помогите разобраться пожалуйста.
Вопрос относительно иконок в Dll и Exe файлах. К примеру кнопки Internet Exlorer ссылаются на иконки в Dll или Exe файле вот так:
C:\PROGRAM FILES\SIBER SYSTEMS\AI ROBOFORM\ROBOFORM.DLL,201
Это якобы должно означать, что нужна иконка под № 201. Но дело в том, что в этом файле их только 20 (проверено разными способами и програмами). Как узнать какая нужна иконка? Это точно не первая иконка файла. Я пользовался
ExtractAssociatedIcon(РInstance, PChar(Name), IconIndex) и
ExtractIcon(РInstance, PChar(Name), IconIndex) результат одинаков.


Nickolay   (2002-06-18 10:39:00) [1]

И снова проблема. На Win2000 работает несколько методов, все они возвращают то что надо, но под 98 и Милениум из DLL не вытаскивает, что примечательно из ЕХЕ вытаскивает правильно.


Nickolay   (2002-06-12 14:12:00) [2]

2 Song
Спасибо, вроде работает если индекс иконки указывать отрицательным.


Song   (2002-06-12 12:20:00) [3]

Ok, тогда ExtractIcon() - эта будет ту возвращать.


Nickolay   (2002-06-12 11:40:00) [4]

ExtractAssociatedIcon() не ту иконку возвращает. Эта ф-ция возвращает иконки по их порядковому номеру, т.е. не то что мне надо. Получается та же проблема что я в вопросе писал.


Song   (2002-06-12 11:16:00) [5]

А ExtractAssociatedIcon() не подойдёт? Там и мороки меньше..


Nickolay   (2002-06-12 10:37:00) [6]

Возникла еще одна проблема.
Не вытаскиваются иконки из ЕХЕ файлов под Win98/ME.
LoadLibrary срабатывает, а вот LoadIcon возвращает 0. Кто нибудь знает в чем тут дело?
вот код:
procedure TForm1.Button2Click(Sender: TObject);
var
Name : String;
Ico : HIcon;
IconIndex : word;
AModule : THandle;
begin
Name := Edit3.Text;
IconIndex := StrToInt(Edit4.Text);
AModule := LoadLibraryEx(PChar(Name),0,LOAD_LIBRARY_AS_DATAFILE);
Edit1.Text := IntToStr(AModule);
Ico := LoadIcon(AModule,PChar(IconIndex));
Edit2.Text := IntToStr(Ico);
DrawIcon(Form1.Canvas.Handle,10,10,Ico);
FreeLibrary(AModule);
end;


Nickolay   (2002-06-10 11:09:00) [7]

2 Suntechnic
Всем огромное спасибо за помощь, теперь я понял и все заработало.


Song   (2002-06-07 23:12:00) [8]

2Suntechnic © (07.06.02 20:27) Delphi 6:

Loads an icon resource into the icon object.

procedure LoadFromResourceName(Instance: Cardinal; const ResName: string);

Description

LoadFromResourceName loads the specified icon resource from a module"s executable file.

Instance is the handle of the module that contains the resource.

ResName is the name of the resource to load.


Suntechnic   (2002-06-07 20:27:00) [9]

>Song © (07.06.02 13:38)
Что то ты тут напутал. У TIcon нет такой ф-ции. У TBitmap есть. Правда может в 6 версии добавили, так что спорить не буду, да и вопрос вроде в конференции по Win API...

>Nickolay (07.06.02 14:59)
Ну что здесь не понятного. Иконки обычно хранятся в ресурсах. Ресурсы могут быть как у exe так и у dll. А иногда dll просто используется как хранилище ресурсов и ничего более. Так вот, если иконка находится не у тебя в exe, а где-то в dll то тебе необходимо загрузить эту dll с помошью LoadLibrary. А затем используя API ф-цию LoadIcon загрузить иконку из данной dll. Особое внимание обрати на первый параметр ф-ции LoadIcon. Туда должен передаваться handle твоей загруженной dll, который ты получишь после LoadLibrary.


Nickolay   (2002-06-07 14:59:00) [10]

Народ, а можно пример? Что то я не совсем понял.


Song   (2002-06-07 13:38:00) [11]

Sorry, TIcon.LoadFromResourceName()


Nickolay   (2002-06-07 12:58:00) [12]

Song

а что это за функция? У TIcon такой нет. Какой Delphi?


Song   (2002-06-06 20:40:00) [13]

TIcon.LoadResourceName()


Suntechnic   (2002-06-06 19:56:00) [14]

№ 201 это не номер иконки, а её идентификатор, а кто сказал, что они должны быть по порядку?
Хочешь извлечь иконку с идентификатором № 201? Тогда делай LoadLibrary и дальше LoadIcon c идентификатором.


Наверх

Титульная страница Поиск, карта сайта Написать письмо