Delphi实现提取可执行文件内部所有图标
本实例实现的功能是能够从用户选择的可执行文件(后缀名为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实现提取可执行文件内部所有图标的更多相关文章
- delphi编写提取exe文件的ICO图标
http://www.duote.com/tech/4/11797.html delphi编写提取exe文件的ICO图标 7.0分 出处:天下网吧 时间:2011-08-05 人气:2390 核心提示 ...
- Delphi 在任务栏隐藏程序图标
Delphi 在任务栏隐藏程序图标 方法一:1.修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTask ...
- delphi 动态获取文件类型的图标
delphi 动态获取文件类型的图标.txt我不奢望什么,只希望你以后的女人一个不如一个.真怀念小时候啊,天热的时候我也可以像男人一样光膀子!在应用程序的编写中,组合框(ComboBox).列表框(L ...
- Delphi提取EXE,DLL文件图标
//uses ShellAPIprocedure TForm1.Button1Click(Sender: TObject);var IconIndex:Word; h:hICON;begin Icon ...
- 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】
[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...
- 读取Devexpress内部的图标
1.图标在Dev源码的存储路径: Sources D.x.u 15.1.3\DevExpress.Images\Images 2.引用DevExpress.Images.v15.1.dll文件,代 ...
- Delphi 注册文件类型 设置文件图标
{------------------------------------------------------------------------------- @过程名: slpert -& ...
- Delphi 实现任务栏多窗口图标显示(使用WS_EX_APPWINDOW风格)
uses Windows;type TfrmLogin = class(TForm) end; implementation {$R *.dfm} procedure TfrmLogin.FormCr ...
- Delphi 实现任务栏多窗口图标显示
uses Windows; type TfrmLogin = class(TForm) end; implementation {$R *.dfm} procedure TfrmLogin.FormC ...
随机推荐
- SQL 内部连接
内部链接INNER JOIN关键字选择两个表中具有匹配值的记录. SQL INNER JOIN 语法 SELECT column_name(s) FROM table1 INNER JOIN tabl ...
- MD5、SHA1、DES加密和解密,Base64编码解码
/// <summary> /// EncryptHelper 来自 www.Admin10000.com /// </summary> public class Encryp ...
- 探索Redis设计与实现13:Redis集群机制及一个Redis架构演进实例
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- python实现人民币大写转换
问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...
- Jquery 实现回车键触发功能
keyup,上抬键盘 .$(function(){ 方法一: $(document).keyup(function(event){ if(event.keyCode ==13){ alert(&quo ...
- SQL server 2012序列号 注册码
企业核心版: FH666-Y346V-7XFQ3-V69JM-RHW28 商业智能版: HRV7T-DVTM4-V6XG8-P36T4-MRYT6 开发版: YQWTX-G8T4R-QW4XX-BVH ...
- 【react】---react中使用装饰器
一.creact-react-app中使用装饰器 运行 npm run eject 可以让由create-react-app创建的项目的配置项暴露出来 此时,项目中多了一个config文件,并且各个配 ...
- 13.JMeter 参数化、检查点、集合点
参数化:简单的来理解一下,我们录制了一个脚本,这个脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进 ...
- activiti7流程变量的测试(设置全局变量)
package com.zcc.activiti03; import org.activiti.engine.*;import org.activiti.engine.repository.Deplo ...
- PHP中global与$GLOBALS的区别
单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以带到全局去. $GLOBALS 是一个关联数组,每一个变 ...