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

减小字体 增大字体 作者:佚名  来源:万一的博客  发布时间:2011-10-20 12:34:20

参考: 和 FMX 相关的类(表)
我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画.

在 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 文件中找到办法.

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

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 1 条,得分 85 分,平均 85 分) 查看完整评论
[回复] 1QQ453224127   打分:85 分  发表时间:2012-10-16
· 在Xe3里,加入了一个Demo提供的TStyleBook后,原来的TCombEdt控件等下拉就失效了,估计就是TStyleBook的问题,但不知道怎样修改样式才能让他有效。

广告位置B