|
#1
|
|||
|
|||
Иконки в файлах
проблема встала не с самим вытаскиванием иконки из файла,
а с определением количества иконок в данном файле var Icon : TIcon; begin Icon := TIcon.Create; Icon.Handle := ExtractIcon(0, 'имя файла', IconIndex); ..... в help-e написано, что если IconIndex сделать равным -1, то вернется количество иконок однако отрицательные значения вообще не воспринимаются как поступить? может есть другой способ? посоветуйте |
#2
|
|||
|
|||
а в ответ тишина
не может быть, чтобы наши уважаемые модераторы не знали ответа на этот вопрос |
#3
|
||||
|
||||
ээ... ну попобуй так:
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
ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738) |
#4
|
||||
|
||||
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
|
|||
|
|||
Ок попробую
|
#6
|
|||
|
|||
еще вариант
ответили на форуме 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
|
||||
|
||||
хехе спасиб)))
[ Ты не сможешь никому помочь до тех пор, пока не поможешь себе ] Delphi 7 user
ICQ: 570224849 / JID: x-rem@jabber.ru|no / Skype: ukc-rem / VK: ukc_rem.vk.com (ID: 27703738) |