以下为我自己研究得出的。下面连接为原帖
43aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8G2M7r3W2U0i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4g2Q4x3V1j5J5x3o6l9&6x3o6j5H3y4q4)9J5c8U0p5K6i4K6u0r3z5e0V1^5x3h3q4U0y4h3k6Q4x3X3b7I4y4o6b7%4i4K6u0V1y4r3t1$3y4g2)9J5k6o6R3&6z5r3y4Q4x3X3b7#2y4K6j5#2j5K6k6U0y4X3j5$3x3o6u0Q4x3X3g2Z5N6r3#2D9
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