请问如何把可执行文件的图标提取出来存为ICO文件? (20分)

  • 主题发起人 主题发起人 nutian
  • 开始时间 开始时间
N

nutian

Unregistered / Unconfirmed
GUEST, unregistred user!
生成的可执行文件的图标和窗口标题栏的图标都是DELPHI默认的那种有个地球的图标,
比如说,我看到有个别人做好的可执行文件,他的图标很漂亮,但文件夹中没有单独
的那个位图,我如何让自己的可执行文件的图标和软件的标题栏的图标成为别人软件的
图标;
我没找到这方面的有关资料!请帮助。
 
首先打开DELPHI,点选Project-Options-Application标签页,点LoadIcon就可以添选自己想要的图标。
 
同楼上。
 
用专门修改工具也可
 
只能加入.ico的文件吗?别人的可执行文件的图标能引用吗?
.ico图标怎么制作?
谢谢!
 
引用恐怕不行
找找ico库吧,很多的
当然也可以自己做
 
delphi Tools-Image Editor
 
看来只能这样了,散分了!
 
我想应该有其他方法可以把别人的图标扒下来哦!有做过的人介绍一下啊!
 
extractIcon在第三个参数为-1时,返回值是文件中图标的个数。

但根据delphi中extractIcon的声明,返回值是HICON,无法强制转换为integer,
那我怎么取得文件中图标的个数呢?
====================================================
procedure TForm1.FileListBox1Click(Sender: TObject);
var
icon : TIcon;
filename : string;
i,j : integer;
listItem : TListItem;
begin
filename := fileListBox1.FileName;
icon := TIcon.Create;
i := strToInt(intToStr(extractIcon(hInstance,pchar(filename),-1))); //HERE
for j:=0 to i-1 do
begin
icon.Handle := extractIcon(hInstance,pchar(filename),j);
listItem := listView1.Items.Add;
listItem.ImageIndex := imageList1.AddIcon(icon);
inc(i);
end;
icon.Free;
end;

在标记处有错误提示:
Constant expression violates subrange bounds

何解?


来自:cqbaobao, 时间:2002-6-6 13:44:00, ID:1146541
-1 换成 $FFFFFFFF
=====================
我用extracticon提取了可执行文件中的所有图标,用image显示。
在保存该图标时用Image1.Picture.Graphic.SaveToFile(SaveDialog1.FileName);
image1.Picture.SaveToFile(SaveDialog1.FileName);
Image1.Picture.Icon.SaveToFile(SaveDialog1.FileName);
<1>这三者有区别吗???
<2>保存为ico的格式没有问题,但保存为bmp时,我的图片是黑色的,
是不是icon不能保存为bmp?
<3>当image内有图片时,想清空用什么语句??我试了一下
Image1.Picture.Icon.Handle:=0;
行的通,请问还有别的清空办法吗???



来自:zhihuali, 时间:2001-11-27 23:36:00, ID:753771
<1>有区别。
<2>如果是ICO用第三句来保存。可以保存为BMP。
<3>清空: Image1.Picture.Assign(Nil);



来自:xxy1898, 时间:2001-11-28 0:19:00, ID:753803
to zhihuali:
能讲讲三者的区别吗?看在50分的面子上:]
我用extracticon得到的是hicon类型,三种方法保存为ico均没有问题,但保存bmp时
都是黑色的!!
===================================
先用
图标总数:=ExtractIcon(当前应用程序实例句柄,在其中提取图标的那个程序的全名,-1);
for i:=0 to t-1 do
图标的句柄:= ExtractIcon(当前应用程序实例句柄,在其中提取图标的那个程序的全名,i);
试一试.
==================================



 
自己总结:
函数声明uses部分要加入shellAPI
请注意 ExtractIcon 的定义:
HICON ExtractIcon(
HINSTANCE hInst, // 当前应用程序实例句柄 不用管它,都用hInstance做参数
LPCTSTR lpszExeFileName, // 在其中提取图标的那个程序的全名
UINT nIconIndex // -1函数返回图标个数,要返回第2个图标的句柄这里就用1
);
最后一个参数是 UINT 无符号整型,那当然不能传个负号过去,这样:
Total:=ExtractIcon(hInstance, PChar(ModuleName), DWord(-1));//强制类型转换
或:
Total:=ExtractIcon(hInstance, PChar(ModuleName), $FFFFFFFF);

应用:
显示第一个图标示例,用了个image1图象构件显示
image1.Picture.Icon.Handle:=extractIcon(hInstance,'文件名',0);
把图标存为ico文件
image1.Picture.Icon.SaveToFile('e:/111.ico');
顺利扒下图标,花了半天时间终于搞定!!


 

Similar threads

D
回复
0
查看
744
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
后退
顶部