extracticonex

5 отговора 157 прегледа
#1

extracticonex

Здравейте!
Опитвам да екстрактна няколко икони с тази функция но не се получава.
Една икона(1малка и 1голяма) става но за повече не се справям.
Гледам и някакъв фак на борланд където има пример от 98г. но не се получава защото ми иска променлива хикон а ми връща указател към масив.
Пробвах с указател за масив и с масив но не става. Освен това компилатора ми дава грашка още като се опитам да подам nil като параметър когато опитвам да получа броя на иконите като сазва че типа не е същия.
Някой можели да помогне?
Предварително ви благодаря.
Чао!

Отговор
в отговор на v_automation #2

Re: extracticonex

В Demos директорията на делфи има Resxplor.
(при мен е:
C:\Program Files\Borland\Delphi5\Demos\Resxplor)
Програмата вади ресурси от dll и exe.
Виж я. Може би ще ти помогне.

Отговор
в отговор на v_automation #3

Re: extracticonex

Ако беше обърнал внимание на фак-а щеше да видиш че е променена
декларацията на ExtractIconEx и от:

ExtractIconEx(lpszFile: PChar; nIconIndex: Integer;
var phiconLarge, phiconSmall: HICON; nIcons: UINT): UINT;

е променена на:

type ThIconArray = array[0..0] of hIcon;
type PhIconArray = ^ThIconArray;

function ExtractIconEx(lpszFile: PAnsiChar;nIconIndex: Integer;
phiconLarge : PhIconArray;phiconSmall: PhIconArray;nIcons: UINT): UINT;

Междувпрочем кода го пробвах работи перфектно

Отговор
в отговор на P #4

Re: extracticonex?

Zdravey!
Az tova go vidyah no v definiciyata na funkciyata v delphi ne e promenena taka a e kakto v stariyat varyant. Az sam s delphi 7 i kakvo li ne opitah no ne mojah da izvleka matrica c pointeri za ikonite a samo 1 po 1 zastoto v delphito funkciyata e definirana s hicon i drugo ne priema za arfument.
Ti s koya versiya si i kak tochno definirash promenlivata i vikash funkciyata za da izvlechesh matrica to popinteri?

Отговор
в отговор на v_automation #5

Re: extracticonex?

//Дефиницията е една и съща в всички варианти
// на Delphi и се намира в ShellAPI
//Просто си пишеш собствена дефиниция на функцията



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ExtCtrls, StdCtrls,shellapi;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
TxtPathToFile: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public

{ Public declarations }
end;

var
Form1: TForm1;

implementation

type ThIconArray = array[0..0] of hIcon;
type PhIconArray = ^ThIconArray;

function ExtractIconEx_Main(lpszFile: PChar; nIconIndex: Integer;
phiconLarge: PhIconArray;phiconSmall:PhIconArray;nIcons: UINT): integer; stdcall;
external 'shell32.dll' name 'ExtractIconExA';
{$R *.dfm}

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_Main(PChar(TxtPathToFile.Text) ,
-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_Main(PChar(TxtPathToFile.Text),
0,
pTheLargeIcons,
pTheSmallIcons,
numIcons);

for i := 0 to (NumIcons - 1) do
begin
DrawIcon(Form1.Canvas.Handle,
i * LargeIconWidth,
0,
pTheLargeIcons^);
TheIcon := TIcon. Create;
TheBitmap := TBitmap.Create;
TheIcon.Handle := pTheSmallIcons^;
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;

FreeMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
FreeMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
end;



end;

end.

Отговор
в отговор на P #6

Re: extracticonex?

Благодаря за отговора!
Не бях разбрал че трябжа да предефинирам функцията защото документа на борланд беше от 1998г. и не предполагах че не е поправено при мположение че съм с най-новата версия на делфито която е доста след 1998. Освен това ведньж си предефинирах 1 функция и после установих че си я е имало но не точно в модула в който предполагах а и като пиша тук все ме изкарват че несам напражил нещо както трябва и че незнам, та затова си мислих че пак не сам направил нещо.
Още ведньж благодаря!
Чао.

Отговор