extracticonex
5 отговора
157 прегледа
extracticonex
Здравейте!
Опитвам да екстрактна няколко икони с тази функция но не се получава.
Една икона(1малка и 1голяма) става но за повече не се справям.
Гледам и някакъв фак на борланд където има пример от 98г. но не се получава защото ми иска променлива хикон а ми връща указател към масив.
Пробвах с указател за масив и с масив но не става. Освен това компилатора ми дава грашка още като се опитам да подам nil като параметър когато опитвам да получа броя на иконите като сазва че типа не е същия.
Някой можели да помогне?
Предварително ви благодаря.
Чао!
Опитвам да екстрактна няколко икони с тази функция но не се получава.
Една икона(1малка и 1голяма) става но за повече не се справям.
Гледам и някакъв фак на борланд където има пример от 98г. но не се получава защото ми иска променлива хикон а ми връща указател към масив.
Пробвах с указател за масив и с масив но не става. Освен това компилатора ми дава грашка още като се опитам да подам nil като параметър когато опитвам да получа броя на иконите като сазва че типа не е същия.
Някой можели да помогне?
Предварително ви благодаря.
Чао!
Re: extracticonex
В Demos директорията на делфи има Resxplor.
(при мен е:
C:\Program Files\Borland\Delphi5\Demos\Resxplor)
Програмата вади ресурси от dll и exe.
Виж я. Може би ще ти помогне.
(при мен е:
C:\Program Files\Borland\Delphi5\Demos\Resxplor)
Програмата вади ресурси от dll и exe.
Виж я. Може би ще ти помогне.
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;
Междувпрочем кода го пробвах работи перфектно
декларацията на 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;
Междувпрочем кода го пробвах работи перфектно
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?
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?
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.
// на 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.
Re: extracticonex?
Благодаря за отговора!
Не бях разбрал че трябжа да предефинирам функцията защото документа на борланд беше от 1998г. и не предполагах че не е поправено при мположение че съм с най-новата версия на делфито която е доста след 1998. Освен това ведньж си предефинирах 1 функция и после установих че си я е имало но не точно в модула в който предполагах а и като пиша тук все ме изкарват че несам напражил нещо както трябва и че незнам, та затова си мислих че пак не сам направил нещо.
Още ведньж благодаря!
Чао.
Не бях разбрал че трябжа да предефинирам функцията защото документа на борланд беше от 1998г. и не предполагах че не е поправено при мположение че съм с най-новата версия на делфито която е доста след 1998. Освен това ведньж си предефинирах 1 функция и после установих че си я е имало но не точно в модула в който предполагах а и като пиша тук все ме изкарват че несам напражил нещо както трябва и че незнам, та затова си мислих че пак не сам направил нещо.
Още ведньж благодаря!
Чао.