lazarus开发小工具从exe里提取ico

lazarus
跨平台free pascal语言ide工具,社区 http://www.fpccn.com/ 下载 ftp://freepascal.dfmk.hu/pub/lazarus/

号称一次编码,到处编译,window linux macos 等各种平台都可用。borland的delphi也是pascal开发工具但是收费,开源的lazarus免费用用挺好

大的项目不说,小的工具还是值得一用,有时候整个小工具发现没有合适的图标,那就从别的exe或dll里临时借用一个,然后就有编码的开始。当然ico是windows下的事,所以就用windows下的api环境开发吧

网上一搜delphi的教程,很早就有这类代码了

利用api把ico提取到ticon变量,然后保存即可

icon.SaveToFile('E:/MySoftTest/Test.ico');

这段执行的结果就是保存的16色的图标文件,预览图标文件明显看到颜色失真

解决方案就是更改delphi的 Graphics.pas文件

WriteIcon函数里调用 InternalGetDIBSizes和InternalGetDIB 最后一个参数16改为65536

然后在命令行模式下重新编译 Graphics.pas文件 ,步骤如下:

cd C:/Program Files/Borland/Delphi7/Source/Vcl
dcc32 Graphics.pas 

编译好的graphics.dcu文件记得要复制到delphi的lib和lib/debug下,然后再编译自己的程序即可

delphi下成功了,lazarus里竟然找不到WriteIcon,看来他们写ico算法不一样

那么一种方案就是把delphi里的算法复制一份到自己的lazarus工程里,代码好多感觉不太方便

另一种就是delphi里做成dll,然后你到lazarus里调用,试过了成功了,动态加载指针写法稍微变化,还算顺利

换个vb调用dll竟然得不到ico资源

然后就是终极大发,delphi里做个控制台程序,这样其他任何语言的程序都可调用了

 

 

你可能感兴趣的:(lazarus,lazarus,pascal,delphi,ico)