Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)
我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画.
在 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 命名有约定(这是我猜的):
、类名(去掉前面的T) + 'style' //这是独立控件的样式名称
、类名(去掉前面的T) //这是控件子部件的样式名称
、既然有了命名约定, 控件可以根据自己的类名去套用, 所以会发现大多数控件的 StyleLookup 属性并无赋值
、修改控件或子部件的样式都应该通过 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 文件中找到办法.
很肤浅, 谁知道更多, 愿能告诉我.
Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)的更多相关文章
- Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...
- Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...
- Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...
- Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...
- Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSma ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...
随机推荐
- 【FAQ】P3. 为什么 torch.cuda.is_available() 是 False
为什么 torch.cuda.is_available() 是 False torch.cuda.is_available(),这个指令的作用是看,你电脑的 GPU 能否被 PyTorch 调用. 如 ...
- Vue 创建多页面应用模式
一.多页和单页 应用模式对比 多页应用模式 单页应用模式 应用组成 由多个完整页面组成 由一个外壳页面和多个页面片段组成 跳转方式 页面间跳转 在外壳页面里面,进行页面片段的跳转 加载方式 重新加 ...
- ThinkPHP无法打开或点击不了Trace的问题
首先先确认是否打开了Trace配置项,ThinkPHP3.*为'SHOW_PAGE_TRACE'=>true,ThinkPHP5.*为'app_trace'=>true. 如果已经确认开启 ...
- 把excel中的数据导入到Oracle数据库中
从事工作以来,数据库一直使用oracle,却不知道excel导入oracle,今天看了一篇文章,分享给大家,希望对大家有用. https://jingyan.baidu.com/article/0f5 ...
- 一、IIS搭建前端静态模板_资源加载问题
一.模板文件说明和效果展示 二.IIS配置模板 三.解决方案 把资源文件复制到html目录内与index.htm同级,因为我iis指定站点就是该目录.
- STM32F407 跑马灯实验
1.库函数版本调用的函数有哪些?对应的源文件/头文件是哪个? 库函数 源文件 头文件 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE) stm3 ...
- CentOS7 编译安装python3.6.8(升级python)
1.安装依赖包和需要用到的工具 yum -y install wget openssl openssl-devel 这里如果不升级openssl,安装后pip安装模块可能会出错.点我查看pip安装模块 ...
- TreeView详细用法
Treeview用于显示按照树形结构进行组织的数据. Treeview控件中一个树形图由节点(TreeNode)和连接线组成.TtreeNode是TTreeview的基本组成单元. ...
- 2019 计蒜之道 初赛 第二场 B. 百度AI小课堂-上升子序列(简单) ( 实现)
题目背景 91029102 年 99 月 22 日,百度在 X 市 XX 中学举办的第一场 AI 知识小课堂大获好评!同学们对矩阵的掌握非常棒. 今天的 AI 知识小课堂的第二场开讲啦.本场 AI ...
- 主流Linux发行版及联系
一.主流Linux主流发行版 RedHat:Red Hat Linux是由Red Hat公司发行的一个Linux发行包.其1.0版本于1994年11月3日发行,虽然其历史不及Slackware般悠久, ...