itljl 发表于 2010-6-9 14:13:28

回复 16# C.L


    我先学习一下原理,特别是自定dat文件。

itljl 发表于 2010-6-9 14:17:30

回复 16# C.L

关键的问题还是在这

GUICtrlSetImage($listitem,@TempDir&"\r"&($j+1)/2&".ico")

这个还生成了临时文件.这样的话其实没有解决这个问题的初衷。
之所以要将图标,犹其是大量的图标如500个。写入到dat文件来加载到listview的目的就是为了避免
500次打开和关闭每一个ico文件。因为如果能够直接在dat文件加载的话,只需要打开一次文件,最后再一次性关闭文件就可以了。。

不过非常感谢你的回复,从你的源码中学到了不少东西。

pusofalse 发表于 2010-6-9 14:24:25

只要明白其中的数据结构,那么啥问题都不是问题。

C.L 发表于 2010-6-9 15:02:33

回复 18# itljl

按你的要求,应该是想要类似于shell32.dll这样的图标库文件,调用时用"shell32.dll,3"之类的方式,对此,我没有研究过shell32.dll这种图标库文件的数据结构,不知道用AU3如何实现。

不过,要做成图标库文件,网上好象有很多制作的程序。

lynfr8 发表于 2010-6-9 15:46:01

回复itljl

按你的要求,应该是想要类似于shell32.dll这样的图标库文件,调用时用"shell32.dll,3"之类 ...
C.L 发表于 2010-6-9 15:02 http://www.autoitx.com/images/common/back.gif


    http://www.autoitx.com/forum.php?mod=viewthread&tid=13753&highlight=
打包图标为dll和au3应用简单教程

lynfr8 发表于 2010-6-9 15:47:28

我能确认的是,这个文件保存的是图标,是用AU3将exe的图标提取并写入其中的。并且,还可以用AU3将这个文件内 ...
itljl 发表于 2010-6-8 18:34 http://www.autoitx.com/images/common/back.gif


    楼主将这个au3程序发上来看看

lynfr8 发表于 2010-6-9 15:48:07

回复C.L


还有个问题就是 ,兄台这样的设想用函数 GUICtrlSetImage 是否能调用。
如果需要从dat将图 ...
itljl 发表于 2010-6-9 13:58 http://www.autoitx.com/images/common/back.gif


    GUICtrlSetImage貌似只见过调用dll,未见过调用dat

C.L 发表于 2010-6-9 16:03:44

回复 23# lynfr8

谢谢提供链接,调用外置也不失为一种很简单实用的方法,如果是纯AU3来作,知道图标库文件的数据结构,应该也可以实现的吧


GUICtrlSetImage貌似只见过调用dll,未见过调用dat


后缀可以自定义的,如果你把shell32.dll改成shell32.dat,只要文件内部的数据结构不变,调用一样的效果。

republican 发表于 2010-6-9 16:12:15

谢谢了,刚刚需要~~~

lanfengc 发表于 2010-6-9 16:21:29

本帖最后由 lanfengc 于 2010-6-9 16:24 编辑

你可以参考我分析的BMP图片的存储格式来做这样的DAT文件。将其中的点的颜色信息变成你的ICO图标数据。BMP图片存储格式浅析(16进制)
首先,开始的两个字符为BM,代表的是BMP格式文件,
紧接着的那4个16进制字符代表的是该BMP文件的大小,1象素时候为3A,以后每增加1象素加4.
然后再跟上00000000 36000000 28000000(暂不知道是什么)。
然后再跟上图片宽*高,都是4位16进制数(如:01000000 01000000代表的是1*1象素的图片)
再跟上0100180000000000,
再跟上像素数乘以4的16进制数,如:1象素的则是04000000。
再跟上00000000000000000000000000000000,
再跟上颜色信息,颜色信息由BGR格式的3位16进制数组成。末尾跟上00结束符,代表图片结束。
另外,如果图片换行,则在上一行末尾加上0000换行符。

1*1红色位图

42 4D   ;文件头,windows下恒为BM
3A 00 00 00 ;文件大小信息,字节数
00 00 00 00 ;恒为零
36 00 00 00 ;
28 00 00 00 ;windows下恒为28
01 00 00 00 ;图像宽度
01 00 00 00 ;图像高度
01 00 18 00 00 00 00 00 ;图像压缩格式和位图格式.
04 00 00 00 ;图像数据大小
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;未知(我不知道干什么的)
00 00 FF ;BGR格式的颜色信息.
00 ;文件结束标识符.

ssfnpyu 发表于 2010-6-9 17:25:05

不错不错。。。以后要用到时就来看。。先留个名

itljl 发表于 2010-6-9 20:28:27

回复 22# lynfr8


    你好,这个程序下载:http://down.wglm.net/game/updata/20090102/5116.html
或者他是用AU3将图标写进DLL,然后改名为dat再调用的。这样或许是比较接近的做法。

yoyohot 发表于 2010-6-11 09:29:05


lynfr8 发表于 2010-6-8 22:58 http://www.autoitx.com/images/common/back.gif


    这个代码可以参考下

范统.贾 发表于 2010-6-11 23:30:41

可以写入DLL的嘛,调用起来也方便。

zhangkjian 发表于 2010-6-12 09:02:09

不懂   路过    学习学习
页: 1 [2] 3
查看完整版本: 请教图标是如何用AU3写入这个dat文件的