以下为我自己研究得出的。下面连接为原帖
http://topic.csdn.net/u/20090604/13/9981ac5f-1447-4b65-898c-5765c6c6f602.html
vclskin This is Older Skin File'#13'Please update to new version ! 一点发现
找到了 5.03 与5.20的源码
This is Older Skin File'#13'Please update to new version !
这句发现在
SkinRead.pas里
每读一个SKN file
就要判断一次skn的版本
大概如下:
Delphi(Pascal) codeif header.version=20000 then begin
setlength(s,header.dirlen);
r.read(s[1],header.dirlen);
dir.text:=lowercase(s);
Num:=dir.count;
r.read(sizes[0],num*sizeof(integer));
i:=(num)*sizeof(integer)+header.dirlen+sizeof(Tskinheader);
ms.Seek(0,soFromBeginning);
ms.write(Pointer(Longint(r.Memory)+i)^,r.size-i);
b:=true;
不在版本列表里的
showmessage('This is Older Skin File'#13'Please update to new version !');
从网上找了不少文章 都说是skin控件的版本与SKN的版本不一致。具体的原因无果。
在无意中,找到5.03版本的skin控件,很多SKN文件不在提示版本错误了。
翻开SkinRead.pas 发现 版本控制里多了
Delphi(Pascal) codeif header.version=70000 then begin
setlength(s,$100);
r.Read(s[1],$45);
setlength(s,header.dirlen);
r.read(s[1],header.dirlen);
dir.text:=lowercase(s);
Num:=dir.count;
r.read(sizes[0],num*sizeof(integer));
i:=(num)*sizeof(integer)+header.dirlen+sizeof(Tskinheader)+$45;
ms.Seek(0,soFromBeginning);
ms.write(Pointer(Longint(r.Memory)+i)^,r.size-i);
b:=true;
70000版本的控制
在对比一下5.20的SkinRead.pas 果然,5.20版本没有70000版本的判断。
而4.94版只到50000版
用SkinRead.pas做了个SKN文件版本的判断工具
看看不能读的SKN文件到底是多少版的。
结果为70000
===================看看关于skinBuilder=====================
官方 标注是5.0的 下载出来是7.0的
那好用这个7.0的builder 做个skn看看是多少版
结果为70000
2.5的builder 是20000
6.0的builder 是50000