Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2007, 12:06   #1
JSM
 
Регистрация: 17.06.2007
Сообщений: 7
Вопрос Извлечение иконки из dll

Имеется такая строка: C:\WINDOWS\system32\shell32.dll, 25. Можно ли из нее извлечь иконку и загрузить в Image? Сложность в том чтобы загрузить именно 25 иконку из dll, ну или другую какую нибудь.

PS. Если что мне нужно именно из строки получить иконку. Функция ExtractIcon не подходит, т.к. она требует индекс иконки, а у меня только строка.

Последний раз редактировалось JSM; 27.06.2007 в 12:19.
JSM вне форума Ответить с цитированием
Старый 27.06.2007, 12:43   #2
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

мне это помогло:

Код:
Вопрос: 
Извлечение пиктограммы из exe, dll или ico-файла 
Ответ:
Функция SHELLAPI ExtractIconEx: 
Обратите внимание - в примере функции обьявленны иначе, чем в модуле ShellAPI
type ThIconArray = array[0..0] of hIcon;
type PhIconArray = ^ThIconArray;
 
function ExtractIconExA(lpszFile: PAnsiChar;
nIconIndex: Integer;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external 'shell32.dll' name 'ExtractIconExA';
 
function ExtractIconExW(lpszFile: PWideChar;
nIconIndex: Integer;
phiconLarge: PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external 'shell32.dll' name 'ExtractIconExW';
 
function ExtractIconEx(lpszFile: PAnsiChar;
nIconIndex: Integer;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external 'shell32.dll' name 'ExtractIconExA';
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
NumIcons : integer;
pTheLargeIcons : phIconArray;
pTheSmallIcons : phIconArray;
LargeIconWidth : integer;
SmallIconWidth : integer;
SmallIconHeight : integer;
i : integer;
TheIcon : TIcon;
TheBitmap : TBitmap;
begin
NumIcons :=
ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
-1,
nil,
nil,
0);
if NumIcons > 0 then begin
LargeIconWidth := GetSystemMetrics(SM_CXICON);
SmallIconWidth := GetSystemMetrics(SM_CXSMICON);
SmallIconHeight := GetSystemMetrics(SM_CYSMICON);
GetMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
GetMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
FillChar(pTheLargeIcons^, NumIcons * sizeof(hIcon), #0);
FillChar(pTheSmallIcons^, NumIcons * sizeof(hIcon), #0);
ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
0,
pTheLargeIcons,
pTheSmallIcons,
numIcons);
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
for i := 0 to (NumIcons - 1) do begin
DrawIcon(Form1.Canvas.Handle,
i * LargeIconWidth,
0,
pTheLargeIcons^[i]);
TheIcon := TIcon. Create;
TheBitmap := TBitmap.Create;
TheIcon.Handle := pTheSmallIcons^[i];
TheBitmap.Width := TheIcon.Width;
TheBitmap.Height := TheIcon.Height;
TheBitmap.Canvas.Draw(0, 0, TheIcon);
TheIcon.Free;
Form1.Canvas.StretchDraw(Rect(i * SmallIconWidth,
100,
(i + 1) * SmallIconWidth,
100 + SmallIconHeight),
TheBitmap);
TheBitmap.Free;
end;
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
FreeMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
FreeMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
end;
end;
 
end.
вот нашел пример попроще

Код:
procedure loadicons(fn: string);
var hih:hicon; i:integer;
a:ticon;
begin 
a:=ticon.Create;
i:=0;
hih:=Get_HIcon(fn,i);
while(hih>0)do begin
a.Handle:=hih;
...
inc(i);
hih:=Get_HIcon(fn,i);
end;
a.Destroy;
end;
Извлекает все иконки из файла (будь то dll,exe или icl)
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!

Последний раз редактировалось Вадим Мошев; 18.09.2016 в 00:19.
mrandrey вне форума Ответить с цитированием
Старый 29.06.2007, 21:32   #3
JSM
 
Регистрация: 17.06.2007
Сообщений: 7
По умолчанию

Спасибо огромное!!!!!!!!!!!!!!!!!!!!!!!!!
JSM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Безопасное извлечение устройства Xardas Компьютерное железо 7 28.02.2011 00:49
Извлечение данных из TCppWebBrowser НикСерг Общие вопросы C/C++ 1 13.07.2008 17:16
Безопасное извлечение SunKnight Win Api 1 12.01.2008 02:06
Извлечение пути файлов dagarik Общие вопросы Delphi 7 01.11.2007 14:42
Извлечение ресурса в файл JivotiK Общие вопросы Delphi 1 26.04.2007 11:48