皮肤研究

来源:互联网 发布:编程珠玑 pdf 编辑:程序博客网 时间:2024/04/27 18:39

 皮肤研究

1:第3方控件
   
若用网上现成的控件的话可以有2种选择,第一种是很流行的VCLSKIN,这个第三方的控件已经很程序了,只要设置一个激活的属性为TRUE,然后有一个加载的皮肤的路径把皮肤静态的加载就可以了。第2种选择的话可以可以用AppFace苹果牌的DLL,这是一个已经封装好的DLL了,目前我也没有找到它的原码,appface.dll这个DLL封装了皮肤实现的所有原码,以及接口函数的调用和实现,苹果皮肤的话可以去苹果的官网下载,这种DLL比VCLSKIN又有所不同,它的加载方式是动态的,我想加载哪一个皮肤的话就可以调用它的加载函数去加载,而VCLSKIN是二个属性设置,他需要安装DPK控件包。其他的第3方的控件和这两种大同小异,这里总结出一个结论,若单一的调用VCLSKIN显然比Appface好很多,简捷,方便;而复杂的调用的话建议用Appface,动态的调用想要的皮肤,实现轮换的效果。这里有Appface的demo程序以及我自己写的一个VCLSKIN的例子。Appface的UnitAppface单元提供了这个实现皮肤的所有函数,具体的可以看自带的帮助。

2:换图片的方法

   原理:换图片的方法原理就是拦截消息,在窗体上重画。MIAN给了我一个他写的DEMO,里面所实现的效果就是这种方法实现的,他的消息没有用到。他是通过把那些图片用设计工具把每个窗体上的一个部分给截取下来,然后通过INI文件的方式读取出来给一个TBitmap,最后加载上去的。DELPHI有自带的画Bitmap这种图函数BitBlt,BitBlt这个函数在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败,而SetWindowRgn这个API允许我们改变窗体的状态。CombineRgn这个API是利用两个区域组成一个新的区域,用FillRect这个API指定的刷子填充一个矩形达到背景色填充的效果。

3:MSN皮肤

MSN换肤,就是那种改变窗口的配色方案是否是把所有的控件放一个容器里面,比如Panel里面 然后全部一起改变色彩的缘故。(个人觉得应该不是用到拦截消息,在窗体上重画的那种技术)后来咨询了一下猛禽,他告诉我说MSN的换肤是根据贴图来的,这样的话我们就需要自绘控件,来达到那种效果。MSN的改变配色方案的话就是改变控件的背景色彩,我想到一种方法就是把所有的控件放在panel上面,然后换背景色彩的时候改变panel的色彩,对本身的色彩进行画图运算。

总结:一般的第三方控件只支持DELPHI本身自带的控件,而我们的程序中如果用到自己封装的控件或则另外的第三方控件的话,这样是不支持的,得有我们自己来美化,来实现图片的重绘。

原创粉丝点击