本实例实现的功能是能够从用户选择的可执行文件(后缀名为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. PHP curl_reset函数

    curl_reset— 重置libcurl会话句柄的所有选项. 说明 void curl_reset ( resource $ch ) 该函数将重新初始化cURL的所有选项值(默认值). 注意:cur ...

  2. Linux下用户-组权限配置

    cat /etc/group cat /etc/ashadow 一.用户管理 1.添加用户 #useradd 用户名 useradd php100;用cat /etc/passwd查看 分析:php1 ...

  3. BZOJ 3653: 谈笑风生(主席树)

    传送门 解题思路 首先对于一个\(a\)来说,要求\(b\)和\(c\),那么\(a,b,c\)一定在一条链上.把\(b\)分类讨论,如果\(b\)是\(a\)的祖宗,这个方案数就很好统计了,就是\( ...

  4. 【c#技术】一篇文章搞掂:常见C#技术问题

    1.事件作为参数传递 public class Para { // 定义一种委托(事件类型),可以在此定义这个事件的返回值和参数 public delegate object GetDataMetho ...

  5. 88、使用tensorboard进行可视化学习,查看具体使用时间,训练轮数,使用内存大小

    ''' Created on 2017年5月23日 @author: weizhen ''' import os import tensorflow as tf from tensorflow.exa ...

  6. 创建线程方法&守护线程

    创建线程方法1. class mythread extends Thread{ 重写run方法 } mythread m=new mythread () 启动:m.start() 创建线程方法2. c ...

  7. 使用java读取excel数据

    package excelOperation2; import java.io.File; import java.io.FileNotFoundException; import java.util ...

  8. Jlink 接口定义

    JTAG有10pin的.14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下. 1. 引脚定义 Test Clock Input (TCK) -- ...

  9. POJ 2254 Globetrotter (计算几何 - 球面最短距离)

    题目链接:POJ 2254 Description As a member of an ACM programming team you'll soon find yourself always tr ...

  10. QT的三种开发方式

    最近在学习QT GUI,单纯使用C++硬编码的方式,直接是采用QWidget部件来做,而不是采用QT Designer做UI界面,也不是采用QML+Javascript.单纯使用C++硬编码的方式,缺 ...