本实例实现的功能是能够从用户选择的可执行文件(后缀名为exe)中提取所有图标并且显示在窗体上。

  在窗体中添加TImage 组件、TOpenDialog组件和TButton组件,TImage组件充当显示文件内图标的容器,TOpenDialog组件和TButton组件用来激活提示用户选择GIF动画的对话框。添加组件后的窗体如图1所示。

图1 添加组件后的窗体

  首先在窗体的uses段中添加ShellAPI,然后添加按钮响应代码如下:

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组件上绘制图标。

  程序代码如下:

unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI, Grids, ExtCtrls;

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;

end.

  保存文件,然后按F9键运行程序,程序运行的初始画面如图2所示。

  单击“打开”按钮,弹出一个提示用户选择可执行文件的对话框。确认后,在窗体的TImge组件上显示所选择的可执行文件中存储的图标,如图3所示。

图2 程序运行的初始画面

图3 程序运行结果

  读者从这个实例中可以学到如何提取可执行文件内部的所有图标并应用到自己的程序中。

Delphi实现提取可执行文件内部所有图标的更多相关文章

  1. delphi编写提取exe文件的ICO图标

    http://www.duote.com/tech/4/11797.html delphi编写提取exe文件的ICO图标 7.0分 出处:天下网吧 时间:2011-08-05 人气:2390 核心提示 ...

  2. Delphi 在任务栏隐藏程序图标

    Delphi 在任务栏隐藏程序图标 方法一:1.修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTask ...

  3. delphi 动态获取文件类型的图标

    delphi 动态获取文件类型的图标.txt我不奢望什么,只希望你以后的女人一个不如一个.真怀念小时候啊,天热的时候我也可以像男人一样光膀子!在应用程序的编写中,组合框(ComboBox).列表框(L ...

  4. Delphi提取EXE,DLL文件图标

    //uses ShellAPIprocedure TForm1.Button1Click(Sender: TObject);var IconIndex:Word; h:hICON;begin Icon ...

  5. 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】

    [前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...

  6. 读取Devexpress内部的图标

    1.图标在Dev源码的存储路径: Sources D.x.u 15.1.3\DevExpress.Images\Images   2.引用DevExpress.Images.v15.1.dll文件,代 ...

  7. Delphi 注册文件类型 设置文件图标

        {------------------------------------------------------------------------------- @过程名: slpert -& ...

  8. Delphi 实现任务栏多窗口图标显示(使用WS_EX_APPWINDOW风格)

    uses Windows;type TfrmLogin = class(TForm) end; implementation {$R *.dfm} procedure TfrmLogin.FormCr ...

  9. Delphi 实现任务栏多窗口图标显示

    uses Windows; type TfrmLogin = class(TForm) end; implementation {$R *.dfm} procedure TfrmLogin.FormC ...

随机推荐

  1. 【纪中集训】2019.08.01【NOIP提高组】模拟 A 组TJ

    T1 Description 给定一个\(N*N(N≤8)\)的矩阵,每一格有一个0~5的颜色.每次可将左上角的格子所在连通块变为一种颜色,求最少操作数. Solution IDA*=启发式迭代加深 ...

  2. delphi中SendMessage使用说明

    SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数PostMessage不同,将一个消息寄送到一个线 ...

  3. thinkphp 根据文件后缀的不同返回不同的结果

    ** * 根据文件后缀的不同返回不同的结果 * @param string $str 需要判断的文件名或者文件的id * @return integer 1:图片 2:视频 3:压缩文件 4:文档 5 ...

  4. SLA(服务等级协议)

    SLA:Service-Level Agreement的缩写,意思是服务等级协议.是关于网络服务供应商和客户间的一份合同,其中定义了服务类型.服务质量和客户付款等术语. 定义SLA:Service-L ...

  5. BZOJ 4545

    bzoj 4545 给定一个踹树,支持几种操作. 本质不同子串询问 加入子树 询问字符串\(S\) 在树上的出现次数. 好码好码 重点就是维护\(parent\) 树,考虑用\(LCT\)维护此树. ...

  6. djanjo中url路由匹配规则是啥意思

    一,django路由匹配规则的本质是通过正则表达式对用户的url进行匹配. 1,r 是正则表达式中防止转义的符号,例如在python/n代表换行,加上r就不换行了. 2,$ 正则表达式中表示以什么什么 ...

  7. shell 读取配置文件的用法

    https://blog.csdn.net/qq_36684665/article/details/81134179 亲测有用!

  8. 9.Jmeter自定义Sample(自定义测试内容)完成测试

    问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑(当Jmeter的基本e ...

  9. Java 13 即将发布,新特性必须抢先看!

    作者:h4cd 本文转载自开源中国(ID:oschina2013) 由于 Java 现在采取"半年发布一次新版本"的模式,所以 Java 12 的下一个版本 Java 13/JDK ...

  10. Oracle中常见的Hint(一)

    Oracle中的Hint可以用来调整SQL的执行计划,提高SQL执行效率.下面分类介绍Oracle数据库中常见的Hint.这里描述的是Oracle11gR2中的常见Hint,Oracle数据库中各个版 ...