Delphi实现提取可执行文件内部所有图标
在窗体中添加TImage 组件、TOpenDialog组件和TButton组件,TImage组件充当显示文件
内图标的容器,TOpenDialog组件和TButton组件用来激活提示用户选择GIF动画的对话框。
首先在窗体的uses段中添加ShellAPI,然后添加按钮响应代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
LargeIcon, SmallIcon: Hicon;
Num: integer;
begin
if OpenDialog1.Execute then
begin
Self.Image1.Canvas.Refresh;
Num := ExtractIconEx(pchar(OpenDialog1.FileName),
-1, //设置为-1返回指定文件包含的个数
LargeIcon,
SmallIcon,
1);
for i := 0 to Num - 1 do //这样得到最后一个图标是程序本身的图标。
begin
ExtractIconEx(Pchar(OpenDialog1.FileName), i, LargeIcon, SmallIcon, 1);
DrawIcon(image1.Canvas.Handle, (i div 4)*40, (i mod 4)* 40, large);
end;
end;
end;
当用户在程序运行过程中选择一个可执行文件后,程序首先通过self.Image1.Canvas.
Refresh语句清除TImage组件上的显示内容,然后通过将ExtractIconEx函数的第2个参数指定
为-1来取得可执行文件中图标的数目。得到数目后,通过一个循环中的ExtractIconEx (PCh
ar(self.OpenDialog1.FileName), i, Large, Small, 1)语句把可执行文件中的大、小图标
分别存储在Large和Small变量中。最后通过DrawIcon函数在TImage组件上绘制图标。
整个单元程序代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, shellapi, grids;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
LargeIcon, SmallIcon: Hicon;
Num: integer;
begin
if OpenDialog1.Execute then
begin
Self.Image1.Canvas.Refresh;
Num := ExtractIconEx(pchar(OpenDialog1.FileName),
-1, //设置为-1返回指定文件包含的个数
LargeIcon,
SmallIcon,
1);
for i := 0 to Num - 1 do //这样得到最后一个图标是程序本身的图标。
begin
ExtractIconEx(Pchar(OpenDialog1.FileName), i, LargeIcon, SmallIcon, 1);
DrawIcon(image1.Canvas.Handle, (i div 4)*40, (i mod 4)* 40, LargeIcon);
end;
end;
end;
end.