procedure TfrmMain.btnOpenClick(Sender: TObject); var i:
Integer; Large, Small: HICON; nIcons: Integer; begin if
OpenDialog1.Execute
then begin self.Image1.Canvas.Refresh; nIcons:=ExtractIconEx(PChar(OpenDialog1.FileName),
-1, Large, Small, 1); for i:=0 to nIcons-1
do begin ExtractIconEx(PChar(self.OpenDialog1.FileName), i,
Large, Small, 1); DrawIcon(self.Image1.Canvas.Handle,(i div 4)*40,(i
mod
4)*40,Large); end; end; end; 当用户在程序运行过程中选择一个可执行文件后,程序首先通过self.Image1.Canvas.
Refresh语句清除TImage组件上的显示内容,然后通过将ExtractIconEx函数的第2个参数指定为-1来取得可执行文件中图标的数目。得到数目后,通过一个循环中的ExtractIconEx
(PChar(self.OpenDialog1.FileName), i, Large, Small,
1)语句把可执行文件中的大、小图标分别存储在Large和Small变量中。最后通过DrawIcon函数在TImage组件上绘制图标。
type TfrmMain =
class(TForm) btnOpen: TButton; OpenDialog1:
TOpenDialog; Image1: TImage; procedure btnOpenClick(Sender:
TObject); private { Private declarations } public { Public
declarations } end; var frmMain:
TfrmMain; implementation {$R *.dfm}
procedure
TfrmMain.btnOpenClick(Sender: TObject); var i:
Integer; Large, Small: HICON; nIcons: Integer; begin if
OpenDialog1.Execute
then begin self.Image1.Canvas.Refresh; nIcons:=ExtractIconEx(PChar(OpenDialog1.FileName),
-1, Large, Small, 1); for i:=0 to nIcons-1
do begin ExtractIconEx(PChar(self.OpenDialog1.FileName), i,
Large, Small, 1); DrawIcon(self.Image1.Canvas.Handle,(i div 4)*40,(i
mod
4)*40,Large); end; end; end;