unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls, ImgList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
ImageList1: TImageList;
ListView1: TListView;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
procedure Exit1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
Filename:Tfilename;
Ficon:Ticon;
{ Private declarations }
public
{ Public declarations }
end;
Function Enumresname(hmodule:Hmodule;lptype,lpname:Pchar;lparam:longint):Bool;stdcall;
var
Form1: TForm1;
hexe:Hinst;
implementation
{$R *.DFM}
Function Enumresname(hmodule:Hmodule;lptype,lpname:Pchar; lparam:longint):Bool;stdcall;
var hicon1:hicon;
hresource:hrsrc;
hmem:hrsrc;
lpresource:pbyte;
listitem:Tlistitem;
begin
hresource:=findresource(hexe,lpname,RT_ICON);
hmem:=loadresource(hexe,hresource);
lpresource:=lockresource(hmem);//返回指向锁定资源头字节的指针
hicon1:=Createiconfromresourceex(lpresource,sizeofresource(hexe,hresource),
True,$0030000,32,32,LR_DEFAULTCOLOR);//从锁定可执行资源创建图标句柄
With Form1 do
begin //显示处理
Ficon.handle:=hicon1;
imagelist1.addicon(ficon);
listitem:=listview1.items.add;
ListItem.ImageIndex := imagelist1.count - 1;
ListItem.caption:= format(‘图标%d’,[imagelist1.count]);
end;
result:=True;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.Open1Click(Sender: TObject);
var myflag:integer;
begin
if OpenDialog1.Execute then
begin
Filename:=OpenDialog1.FileName ;
StatusBar1.Panels.Items[0].text:=filename;
OpenDialog1.HistoryList.Add(filename);
hexe:=loadlibrary(pchar(filename));
if (hExe =0 ) then Showmessage(‘无法加载可执行文件!’);
myflag:=1;
imagelist1.Clear ;
listview1.Items.Clear ;
Enumresourcenames(hexe,RT_ICON,@enumresname,myflag);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Ficon:=Ticon.Create ;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Ficon.FREE;
end;
end.