Форум: "WinAPI";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
ВнизНомер иконки в Dll или Exe файле больше их количества Найти похожие ветки
← →
Nickolay (2002-06-06 18:28) [0]Здравствуйте,
помогите разобраться пожалуйста.
Вопрос относительно иконок в 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) результат одинаков.
← →
Suntechnic (2002-06-06 19:56) [1]№ 201 это не номер иконки, а её идентификатор, а кто сказал, что они должны быть по порядку?
Хочешь извлечь иконку с идентификатором № 201? Тогда делай LoadLibrary и дальше LoadIcon c идентификатором.
← →
Song (2002-06-06 20:40) [2]TIcon.LoadResourceName()
← →
Nickolay (2002-06-07 12:58) [3]Song
а что это за функция? У TIcon такой нет. Какой Delphi?
← →
Song (2002-06-07 13:38) [4]Sorry, TIcon.LoadFromResourceName()
← →
Nickolay (2002-06-07 14:59) [5]Народ, а можно пример? Что то я не совсем понял.
← →
Suntechnic (2002-06-07 20:27) [6]>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.
← →
Song (2002-06-07 23:12) [7]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.
← →
Nickolay (2002-06-10 11:09) [8]2 Suntechnic
Всем огромное спасибо за помощь, теперь я понял и все заработало.
← →
Nickolay (2002-06-12 10:37) [9]Возникла еще одна проблема.
Не вытаскиваются иконки из ЕХЕ файлов под 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;
← →
Song (2002-06-12 11:16) [10]А ExtractAssociatedIcon() не подойдёт? Там и мороки меньше..
← →
Nickolay (2002-06-12 11:40) [11]ExtractAssociatedIcon() не ту иконку возвращает. Эта ф-ция возвращает иконки по их порядковому номеру, т.е. не то что мне надо. Получается та же проблема что я в вопросе писал.
← →
Song (2002-06-12 12:20) [12]Ok, тогда ExtractIcon() - эта будет ту возвращать.
← →
Nickolay (2002-06-12 14:12) [13]2 Song
Спасибо, вроде работает если индекс иконки указывать отрицательным.
← →
Nickolay (2002-06-18 10:39) [14]И снова проблема. На Win2000 работает несколько методов, все они возвращают то что надо, но под 98 и Милениум из DLL не вытаскивает, что примечательно из ЕХЕ вытаскивает правильно.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c