//声明:
ExtractIcon(
hInst: HINST; {调用函数的程序实例}
lpszExeFileName: PChar; {文件路径; 文件可以是 *.exe、*.dll、*.ico}
nIconIndex: UINT {图标索引}
): HICON; {返回图标句柄; 索引为 0 时返回第一个图标句柄; 索引为 #FFFFFFFF 时返回图标总数}
//举例:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ShellAPI; {ExtractIcon 在其中声明}
procedure TForm1.Button1Click(Sender: TObject);
var
ico: TIcon;
i,count,x,y,w,h: Integer;
FilePath: string;
begin
{随便找了个路径, 如果缺失会退出}
FilePath := 'C:\Program Files\Macromedia\Fireworks 8\Fireworks.exe';
if not FileExists(FilePath) then begin ShowMessage('文件不存在'); Exit; end;
ico := TIcon.Create;
x := 10; y := 10; w := 0; h := 0;
Repaint;
{先算出文件内的图标总数}
count := ExtractIcon(HInstance, PChar(FilePath), HICON(-1));
for i := 0 to count - 1 do
begin
{循环提取图标}
ico.Handle := ExtractIcon(HInstance, PChar(FilePath), i);
{画出图标}
Canvas.Draw(x,y,ico);
{下面只是调整显示位置}
if w < ico.Width then w := ico.Width;
if h < ico.Height then h := ico.Height;
x := x + ico.Width + 10;
if x >= ClientWidth - w then
begin
x := 10;
y := y + h + 10;
end;
end;
ico.Free;
end;
end.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库