firemonkey使用style来控制控件的显示方式。
每个控件都有一个stylelookup属性,firemonkey就是通过控件的这个属性来在当前窗体的stylebook控件中查找匹配的style,如果找到了这个style,那么控件就使用这个style来显示。
stylebook是一个style的集合,里面可以有窗体的style,按钮的style,文本框的style,等等。每个style其实就是一个控件,像常用到的tlayout,trectangle等等,只是这个控件需要设置它的stylename。
比如我在stylebook中设计这样一个按钮:
l layout:tlayout(stylename设置为“defaultbutton”)
n rectangle:trectangle(用来显示按钮背景)
u text:tlabel(用来显示按钮标题)
那么这个layout就表示了一个名为“defaultbutton”的style。如果这时候,窗体上放一个button,然后将它的stylelookup属性为“defaultbutton”,firemonkey就会从当前窗体的stylebook中遍历我们设计的所有控件,查找stylename为button的stylelookup属性值的控件,也就是stylename为“defaultbutton”的控件,就是我们刚才设计的layout控件,查找到了之后,就返回一个layout的克隆,也就是复制一个layout(它的子控件也会复制进去),然后在button上显示出来。
原理就讲这些了,下面我用举个例子来演示一下这些步骤:
这个例子是在tlistboxitm控件上使用我们设计的style,
1. 在组件面板(tool palette)上选择一个tstylebook组件,将它拖放到窗体上,name为stylebook1,然后将窗体stylebook属性设置为stylebook1。
2. 在窗体上放一个tlistbox组件,将它拖放到窗体上,name为listbox1。
设置listbox1的align属性为alclient,
并右击listbox1,在弹出的菜单中选中items editor…
点击add item按钮,会在listbox1上面添加一个tlistboxitem,
3. 双击stylebook1,ide会进入到style designer模式:
4. 设计style,首先在组件面板(tool palette)中选择一个tlayout组件(layouts分类),拖动到左上角,
这时候结构视图显示如下:
在属性查看器中设置layout的stylename为defaultitemstyle:
然后我们在layout下添加一个trectangle做为背景:
将这个rectangle的颜色设置为红色,也就是将它的fill.color设置为red,并将rectangle的layout属性设置为alclient:
5. 按一下firemonkey style designer toolbar上面的apply and close按钮,好了,一个名为defaultitemstyle的style已经设计完成了。
6. 然后选中我们之前添加的listboxitem1,在属性查看器中的stylelookup属性值更改为defaultitemstyle。
看,这个listboxitem已经显示成我们设计的style了(一个红色的矩形):