电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 邮件系统-> Lotus Notes
从文件中提取图标_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
----Windows95和NT是被无数计算机用户所青睐的图形界面(GUI)操作系统。我们知道,许多Win95或NT下的32位应用程序都带有图标(一般来说至少有一个),此外其它一些可执行模块也常常是图标的宝库。这些可执行模块包括*.EXE(可执行文件),*.DLL(DynamicLinkLibrary,即,动态连接库),*.CPL(控制面板模块)等。其中,不少图标做得非常精致、漂亮,特别惹人喜欢。当然,其中大部分的图标你可能无法直接看到。因此,不少人也许希望能有一种工具可以把这些精彩的图标从那些文件中"取"出来。笔者就有过这种想法。后来,笔者自己动手写了一个程序,使用它,我现在可以随心所欲地从任何包含图标资源的文件中提取任何我所喜爱的图标,更不用说轻松地浏览文件中的所有图标了。

----大家知道,包含在可执行模块中的图标资源是以二进制数据(或称,资源)的形式存储的,因而,我们应该把这些二进制数据转换成图标文件的格式,然后再存为图标文件(*.ICO)。因为有了InpriseCorporation(原BorlandInternational)的Delphi提供的强大的类库和可视化支持,这项工作已变得相对比较轻松了。Delphi提供了TIcon类,该类中有一个名为SaveToFile的方法,它可方便地把对象所指的二进制数据直接存储成图标格式的文件。于是,要从其它可执行模块中提取图标,我们只需把其它模块中的二进制数据"拷"到一个TIcon对象中即可(在下面的程序中使用了一个TImage构件,该构件中包含了一个TIcon对象)。那么,怎样把数据拷到TIcon对象中呢?其实,你只需把一个图标的句柄赋给TIcon对象的句柄属性,其它细节都由Delphi代我们完成。我们可以通过Windows的API函数ExtractIcon来获取其它模块中图标的句柄。下面的这个程序可以让你轻松地浏览文件中所包含的所有图标,并且可以方便地保存下你喜欢的图标(如果此文件包含有图标资源的话)。此外,该程序还可以把位图文件(*.BMP)或图元文件(Metafile)缩小成图标文件。为了让大家更轻松地阅读此程序,笔者已经使程序的代码尽可能的短小,读者可在本示例的基础上进行其它的扩充。

----向Form1上加入如下构件:

----(1)从Standard页上选取3个TButton构件,并把Button1、Button2和Button3的Caption分别改为"向前浏览"、"向后浏览"和"保存图标"。把Button1和Button2的Tag属性分别改为1和-1(负1)。让Button2跟Button1共用一个OnClick事件句柄。

----(2)从Standard页上选取一个TMainMenu构件,把第一个菜单项(缺省名为N1)的Caption改为"文件",再把它下面的菜单项(N2)的Caption改为"打开文件"。

----(3)从Standard页上选取一个TLabel

----(4)从Additional页上选取一个TImage

----(5)从Dialogs页上选取一个TOpenDialog,并把它的Options属性的ofNoReadOnlyReturn子属性改为False。

----(6)将Form1的Font改成System字体。

----(7)在Unit1的Interface部分的Uses语句中加入ShellAPI单元(以便使用API函数ExtractIcon)。

unitUnit1;
interface
uses
Windows,Messages,SysUtils,Classes,
Graphics,Controls,Forms,Dialogs,
Menus,StdCtrls,ExtCtrls,ShellAPI;
type
TForm1=class(TForm)
Image1:TImage;
Button1:TButton;
Button2:TButton;
Button3:TButton;
MainMenu1:TMainMenu;
N1:TMenuItem;
N2:TMenuItem;
Label1:TLabel;
OpenDialog1:TOpenDialog;
procedureButton1Click(Sender:TObject);
procedureFormCreate(Sender:TObject);
procedureButton3Click(Sender:TObject);
procedureN2Click(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;

var
Form1:TForm1;
Total,//文件中图标的总数
No:Integer;//当前图标在原文件中的序号
Path,//程序所在的路径
ModuleName:String;//从哪个文件提取图标

implementation
{$R*.DFM}
procedureTForm1.Button1Click(Sender:TObject);
//该事件句柄被Button1和Button2所共享
//Button1和Button2的Caption
分别是"向前浏览"和"向后浏览"
//Button1和Button2的Tag分别是1和-1
begin
ifTotal=0ThenExit;
No:=No (SenderasTButton).tag;
ifNo>TotalthenNo:=0;
ifNo<0thenNo:=Total;
Image1.Picture.Icon:=nil;
Image1.Picture.Icon.Handle:
=ExtractIcon(hInstance,PChar(ModuleName),No);
Label1.Caption:=No. IntToStr(No) icon;
//Label1用于指示当前图标在原文件中的序号
end;

procedureTForm1.FormCreate(Sender:TObject);
begin
Path:=ExtractFilePath(Application.ExeName);
//下面的代码使程序有处理命令行参数的能力
ifParamCount>0
Thenbegin
ModuleName:=ParamStr(1);
Total:=ExtractIcon(hInstance,PChar(ModuleName),-1);
Form1.caption:=IntToStr(Total)
icon(s)foundin ParamStr(1);
end;
end;

procedureTForm1.Button3Click(Sender:TObject);
//这段代码保存当前图标
begin
IfTotal=0ThenExit;
Image1.Picture.Icon.SaveToFile
(Path \Icon IntToStr(No) .ico);
{把图标文件与该程序存于
同一目录,文件名为"Icon"加序号的形式}
end;

procedureTForm1.N2Click(Sender:TObject);
//这段代码从菜单中选择一个文件
begin
IfOpenDialog1.Execute
thenbegin
ModuleName:=OpenDialog1.FileName;
Total:=ExtractIcon(hInstance,PChar(ModuleName),-1);
No:=0;Label1.Caption:=;
Form1.Caption:=IntToStr(Total) icon(s)foundin ModuleName;
end;
end;
end.

(调试环境:Delphi4.0,Windows95,WindowsNT4)

----说明:API函数ExtractIcon是在ShellAPI单元中声明的,所以你必须在Uses语句中加入此单元才能使用该函数。它在Delphi中的原型声明如下:

----functionExtractIcon(hInst:HINST;lpszExeFileName:PChar;nIconIndex:UINT):HICON;stdcall;

----参数说明:

----hInst:为调用该函数的实例句柄;

----lpszExeFileName:指明从哪个文件提取图标(不一定非得是EXE文件);

----nIconIndex:该参数为负1时,函数返回指定文件中包含的图标个数;否则,返回序号为nIconIndex的图标(如果存在的话)的句柄。在文件中图标的序号是从0开始的。

----如果函数调用失败则返回0.->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·visualbasic中datacombo和datalist控件的使用_visualbasic教程
·win xp清理磁碟工具的进阶技巧_windows xp
·shell递归程序设计-目录列表_shell教程
·在vb中使用udp协议_visualbasic教程
·visualbasic制作透明的表单(form)_visualbasic教程
·从文件中提取图标_visualbasic教程
·边界和面域_autocad教程
·datagrid控件的使用二_visualbasic教程
·photoshop创意方法绘制熊熊燃烧的火焰_photoshop教程
·复本操作的对象、属性和方法(2)--网络数据库的复制和同步(3)_visualbasic教程

最新文章
·photoshop轻松制作清凉水波效果图_photoshop教程
·php对特殊语句查询结果进行数组排序_php技巧
·photoshop用海滩旅游照片制作证件照_photoshop教程
·php后门的隐藏技巧测试报告_php技巧
·photoshop打造强烈视觉冲击力的过曝照片特效_photoshop教程
·体验adobe fireworks cs3新特性_fireworks教程
·photoshop制作十字绣风格像素图_photoshop教程
·工业产品表面丝印cad制作全过程_autocad教程
·php对文本数据库的基本操作方法_php技巧
·设置好photoshop画笔参数 绘制流畅虚线_photoshop教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号