![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Номер иконки в 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 идентификатором.