Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.04.2007, 10:35
DeSwan DeSwan вне форума
Прохожий
 
Регистрация: 26.12.2006
Сообщения: 11
Репутация: 10
По умолчанию Иконки в файлах

проблема встала не с самим вытаскиванием иконки из файла,
а с определением количества иконок в данном файле

var
Icon : TIcon;
begin
Icon := TIcon.Create;
Icon.Handle := ExtractIcon(0, 'имя файла', IconIndex);
.....
в help-e написано, что если IconIndex сделать равным -1, то
вернется количество иконок
однако отрицательные значения вообще не воспринимаются
как поступить?
может есть другой способ?
посоветуйте
Ответить с цитированием
  #2  
Старый 15.04.2007, 21:24
DeSwan DeSwan вне форума
Прохожий
 
Регистрация: 26.12.2006
Сообщения: 11
Репутация: 10
По умолчанию

а в ответ тишина
не может быть, чтобы наши уважаемые модераторы
не знали ответа на этот вопрос
Ответить с цитированием
  #3  
Старый 15.04.2007, 22:06
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

ээ... ну попобуй так:
var
Icon : TIcon;
ic:byte;
begin
repeat
Icon := TIcon.Create;
ic:=ic+1;
Icon.Handle := ExtractIcon(0, 'icon'+IntToStr(ic)+'.ico', ic);
until FileExists('icon'+IntToStr(ic+1)+'.ico');

Ну ясный пень что какую то фигню написал. Ну если чё додумать можно =DD
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)
Ответить с цитированием
  #4  
Старый 16.04.2007, 09:56
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

IconIndex не может быть равным -1, т.к. его значение лежит в пределах 0..4294967295.

Делай так
Код:
procedure TForm1.FormCreate(Sender: TObject);
const
  //path = 'calc.exe';
  //path = 'notepad.exe';
  //path = 'mspaint.exe';
  path = 'shell32.dll';
var
  hi: HICON;
  i: integer;
begin
   i := 0;
   hi := ExtractIcon( HInstance, path, 0 );
   while ( hi > 0 ) do
   begin
      Inc( i );
      hi := ExtractIcon( HInstance, path, i );
   end;
   Caption := IntToStr( i );
end;
Ответить с цитированием
  #5  
Старый 16.04.2007, 11:44
DeSwan DeSwan вне форума
Прохожий
 
Регистрация: 26.12.2006
Сообщения: 11
Репутация: 10
По умолчанию

Ок попробую
Ответить с цитированием
  #6  
Старый 16.04.2007, 12:36
DeSwan DeSwan вне форума
Прохожий
 
Регистрация: 26.12.2006
Сообщения: 11
Репутация: 10
По умолчанию еще вариант

ответили на форуме delphimaster.ru
написали довольно громоздко но главное

Код:
...
NumIcons :=ExtractIconEx('IcoFile',-1, nil, nil, 0);
...

Сначала в разделе interface пишем такой код: 

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;

всех благодарю за советы
особая благодарность X-rem

Последний раз редактировалось DeSwan, 16.04.2007 в 13:20.
Ответить с цитированием
  #7  
Старый 16.04.2007, 15:33
Аватар для X-rem
X-rem X-rem вне форума
Начинающий
 
Регистрация: 06.04.2007
Адрес: Питер
Сообщения: 119
Репутация: 10
По умолчанию

хехе спасиб)))
__________________
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ]
Delphi 7 user
  • Indy 10.5.5
  • AbfEffects & Controls
  • LockBox
  • AlphaControls
  • Eagle CDK

ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter