Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)

本文深入解析Embarcadero RAD Studio的风格系统,介绍如何使用*.style文件定制控件外观,并提供修改窗体标题栏样式的间接方法。同时分享了如何利用stylebook组件进行样式管理,以及恢复默认样式的步骤。

======================================================
注:本文源代码点此下载
======================================================

我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画.

在 fmx 下, 控件可以任意绘制, 各部件个性化的属性可以统一保存成一个 *.style 文件.

xe2 在 "...\program files\embarcadero\rad studio\9.0\redist\styles\fmx\" 下提供了如下样式文件:

air.style

amakrits.style

aquagraphite.style

blend.style

dark.style

fmx.platform.ios.style

fmx.platform.mac.style

fmx.platform.win.style

goldengraphite.style

ios.style

macblue.style

macgraphite.style

rubygraphite.style

windows7.style

文件是文本格式, 类似窗体文件, 可用 tstylebook 读入并管理.

不过要给程序套用样式, 确简单得很:

procedure tform1.button1click(sender: tobject);

begin

application.stylefilename := '样式文件名'; //如果样式文件和 exe 同目录, 还可以省略路径

end;

在窗体上添加一个 tstylebook(stylebook1), 可以载入、编辑、另存这些样式.

编辑 stylebook1 后, 可以把它直接赋给窗体的 stylebook 属性:

procedure tform1.button1click(sender: tobject);

begin

self.stylebook := stylebook1; //只作用于当前窗体

end;

窗体的 stylebook 属性既然也是 tstylebook 对象, 可以直接使用它:

procedure tform1.button1click(sender: tobject);

begin

stylebook := tstylebook.create(self); //默认情况下, 窗体的 stylebook 还没有建立

stylebook.filename := '样式文件';//或者用下一行

//stylebook.resource.loadfromfile('样式文件'); //tstylebook 是用 resource(tstrings) 储存数据的

end;

单独修改控件样式可以使用 stylelookup 属性, 如:

procedure tform1.button1click(sender: tobject);

begin

button1.stylelookup := 'checkbox';

end;

//在设计时可从控件的右键菜单

*.style 文件中 stylename 命名有约定(这是我猜的):

1、类名(去掉前面的t) + 'style' //这是独立控件的样式名称

2、类名(去掉前面的t)//这是控件子部件的样式名称

3、既然有了命名约定, 控件可以根据自己的类名去套用, 所以会发现大多数控件的 stylelookup 属性并无赋值

4、修改控件或子部件的样式都应该通过 stylelookup 属性, 而不是 stylename(我都觉得 stylename 这个属性有点多余).

我倒是发现控件子部件的 stylename 都可以读的出来:

procedure tform1.button1click(sender: tobject);

begin

showmessage(memo1.hscrollbar.stylename);

showmessage(memo1.vscrollbar.stylename);

end;

其它诸如 applystylelookup()、updatestyle()、findstyleresource() 等相关方法, 一般都是被自动调用的.

程序会把默认样式嵌入到资源中(名称: defaultstyle, 格式: rt_rcdata), 恢复程序的默认样式时只需:

procedure tform1.button1click(sender: tobject);

begin

application.stylefilename := ''; //程序会自动套用默认样式

form1.stylebook := nil;//如果窗体单独设置了样式, 这样恢复

end;

之前有同学问到, 怎么修改窗体标题栏的样式?

学习过程中, 我没有发现很直接的办法;

暂时要我做, 只能是隐藏标题栏, 重新绘制;

等了解的窗体的更多机制以后, 或许也能从 *.style 文件中找到办法.

很肤浅, 谁知道更多, 愿能告诉我.


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值