• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi里动态创建AlphaControls实现换肤

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

http://mosir.org/html/y2012/dynamic-create-alphacontrols-in-the-delphi-project.html

 

AlphaControls是一套Delphi下的优秀的皮肤vcl控件。几年前,一般用得比较多的是vclskin,使用很方便,可惜这套2010年已经停止维护了。后来就看到更多的人开始推崇AlphaControls,即能让别家的控件激活皮肤效果,也可以只使用AlphaControls的控件。

为了方便自动编译、避免异地安装控件的麻烦和日后维护的方便,我们一般是把这个控件选定版本的源码放在项目源码中,通过动态创建的方式来使用这套vcl控件。

比如在delphi项目的源码目录src中,增加一个third目录存放第三方vcl控件,把AlphaControls的源码放到 src/third/ac目录下。在delphi项目的搜索路径中增加./third/ac,即可。

 

动态创建的代码:

skin := TsSkinManager.Create(self);  //创建皮肤管理器对象
skin.SkinDirectory := extractfilepath(application.ExeName)+'skins\';  //设置皮肤文件目录
skin.SkinName := skinfilename;  //指定皮肤
skin.ExtendedBorders := true;
skin.IsDefault := true;
skin.SkinnedPopups := true;
skin.SkinningRules :=[srStdForms, srStdDialogs, srThirdParty];  // 皮肤使用规则
skin.Active := true;  // 激活皮肤

好了,运行后发现空白窗体的皮肤效果已经出来了。但增加了TMemo等控件后,发现这些控件并没有被影响,还是原生界面。因为缺省除AlphaControls提供的同类控件外,其它的控件都属于第三方控件,得单独处理才能有皮肤效果。

 

再增加以下代码:

// with skin.ThirdLists[ord(tpEdit)] do
// begin
// Add('TEdit');
// Add('TMemo');
// Add('TListBox');
// Add('TCheckListBox');
// Add('TRichEdit');
// Add('TDateTimePicker');
// end;
// with skin.ThirdLists[ord(tpButton)] do
// begin
// Add('TButton');
// end;
// with skin.ThirdLists[ord(tpBitBtn)] do
// begin
// Add('TBitBtn');
// end;
// with skin.ThirdLists[ord(tpCheckBox)] do
// begin
// Add('TCheckBox');
// Add('TRadioButton');
// Add('TGroupButton');
// end;
// with skin.ThirdLists[ord(tpGroupBox)] do
// begin
// Add('TGroupBox');
// Add('TRadioGroup');
// end;
// with skin.ThirdLists[ord(tpPanel)] do
// begin
// Add('TPanel');
// end;
// with skin.ThirdLists[ord(tpComboBox)] do
// begin
// Add('TComboBox');
// Add('TColorBox');
// end;
// with skin.ThirdLists[ord(tpPageControl)] do
// begin
// Add('TPageControl');
// end;
// with skin.ThirdLists[ord(tpTabControl)] do
// begin
// Add('TTabControl');
// end;
// with skin.ThirdLists[ord(tpStatusBar)] do
// begin
// Add('TStatusBar');
// end;
// with skin.ThirdLists[ord(tpVirtualTree)] do
// begin
// Add('TVirtualStringTree');
// end;
// with skin.ThirdLists[ord(tpUpDownBtn)] do
// begin
// Add('TUpDown');
// end;
// with skin.ThirdLists[ord(tpSpeedButton)] do
// begin
// Add('TSpeedButton');
// end;

注意,要查看效果请先去掉代码前的注释符号,这样,常用的Delphi控件就都会有皮肤效果了。

可能会注意到上面的代码都被注释掉了,因为我们其实可以更方便让通用第三方控件(对AlphaControls来说)自动具有皮肤效果。

把上面的支持第三方控件的代码去掉,找到./third/ac目录下的sDefs.inc文件,在

// << 3rdparty support start <<

后增加一行:

{$DEFINE RUNIDEONLY}

保存后,重新编译,就会发现其实Delphi自带的控件就已经具有皮肤效果了。

当然,非官方的控件,还是需要通过类似上面的代码自己分类添加才会有效果。比如TVirtualStringTree,就得增加代码:

with skin.ThirdLists[ord(tpVirtualTree)] do
begin
  Add('TVirtualStringTree');
end;

对于一些特殊的控件包,比如TntControls、DevExpress等,可以通过sDefs.inc进行设置进行支持。

在安装控件目录下 找到sDefs.inc 其中有DevExpress设置,修改设置

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab根据圆心和半径画圆三种方式发布时间:2022-07-18
下一篇:
[matlab] 6.粒子群优化算法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap