找回密码
 加入
搜索
楼主: itljl

[GUI管理] 请教图标是如何用AU3写入这个dat文件的

 火... [复制链接]
 楼主| 发表于 2010-6-9 14:13:28 | 显示全部楼层
回复 16# C.L


    我先学习一下原理,特别是自定dat文件。
 楼主| 发表于 2010-6-9 14:17:30 | 显示全部楼层
回复 16# C.L

关键的问题还是在这

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

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

不过非常感谢你的回复,从你的源码中学到了不少东西。
发表于 2010-6-9 14:24:25 | 显示全部楼层
只要明白其中的数据结构,那么啥问题都不是问题。
发表于 2010-6-9 15:02:33 | 显示全部楼层

回复 18# itljl

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

不过,要做成图标库文件,网上好象有很多制作的程序。
发表于 2010-6-9 15:46:01 | 显示全部楼层
回复  itljl

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



    http://www.autoitx.com/forum.php ... 3753&highlight=
打包图标为dll和au3应用简单教程
发表于 2010-6-9 15:47:28 | 显示全部楼层
我能确认的是,这个文件保存的是图标,是用AU3将exe的图标提取并写入其中的。并且,还可以用AU3将这个文件内 ...
itljl 发表于 2010-6-8 18:34



    楼主将这个au3程序发上来看看
发表于 2010-6-9 15:48:07 | 显示全部楼层
回复  C.L


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



    GUICtrlSetImage貌似只见过调用dll,未见过调用dat
发表于 2010-6-9 16:03:44 | 显示全部楼层
回复 23# lynfr8

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

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


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

评分

参与人数 1金钱 +9 收起 理由
lynfr8 + 9

查看全部评分

发表于 2010-6-9 16:12:15 | 显示全部楼层
谢谢了,刚刚需要~~~
发表于 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 ;文件结束标识符.

评分

参与人数 1金钱 +22 贡献 +5 收起 理由
lynfr8 + 22 + 5

查看全部评分

发表于 2010-6-9 17:25:05 | 显示全部楼层
不错不错。。。以后要用到时就来看。。先留个名
 楼主| 发表于 2010-6-9 20:28:27 | 显示全部楼层
回复 22# lynfr8


    你好,这个程序下载:http://down.wglm.net/game/updata/20090102/5116.html
或者他是用AU3将图标写进DLL,然后改名为dat再调用的。这样或许是比较接近的做法。
发表于 2010-6-11 09:29:05 | 显示全部楼层
lynfr8 发表于 2010-6-8 22:58



    这个代码可以参考下
发表于 2010-6-11 23:30:41 | 显示全部楼层
可以写入DLL的嘛,调用起来也方便。
发表于 2010-6-12 09:02:09 | 显示全部楼层
不懂   路过    学习学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-12 03:16 , Processed in 0.080134 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表