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);
beginApplication.StyleFileName := '样式文件名'; //如果样式文件和 exe 同目录, 还可以省略路径
end;


在窗体上添加一个 TStyleBook(StyleBook1), 可以载入、编辑、另存这些样式.
编辑 StyleBook1 后, 可以把它直接赋给窗体的 StyleBook 属性:
procedure TForm1.Button1Click(Sender: TObject);
beginSelf.StyleBook := StyleBook1; //只作用于当前窗体
end;


窗体的 StyleBook 属性既然也是 TStyleBook 对象, 可以直接使用它:
procedure TForm1.Button1Click(Sender: TObject);
beginStyleBook := TStyleBook.Create(Self); //默认情况下, 窗体的 StyleBook 还没有建立StyleBook.FileName := '样式文件';     //或者用下一行//StyleBook.Resource.LoadFromFile('样式文件'); //TStyleBook 是用 Resource(TStrings) 储存数据的
end;


单独修改控件样式可以使用 StyleLookup 属性, 如:
procedure TForm1.Button1Click(Sender: TObject);
beginButton1.StyleLookup := 'checkbox';
end;
//在设计时可从控件的右键菜单


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

1、类名(去掉前面的T) + 'style' //这是独立控件的样式名称
2、类名(去掉前面的T)           //这是控件子部件的样式名称
3、既然有了命名约定, 控件可以根据自己的类名去套用, 所以会发现大多数控件的 StyleLookup 属性并无赋值
4、修改控件或子部件的样式都应该通过 StyleLookup 属性, 而不是 StyleName(我都觉得 StyleName 这个属性有点多余).


我倒是发现控件子部件的 StyleName 都可以读的出来:
procedure TForm1.Button1Click(Sender: TObject);
beginShowMessage(Memo1.HScrollBar.StyleName);ShowMessage(Memo1.VScrollBar.StyleName);
end;


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

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

procedure TForm1.Button1Click(Sender: TObject);
beginApplication.StyleFileName := ''; //程序会自动套用默认样式Form1.StyleBook := nil;          //如果窗体单独设置了样式, 这样恢复
end;


之前有同学问到, 怎么修改窗体标题栏的样式?
学习过程中, 我没有发现很直接的办法;
暂时要我做, 只能是隐藏标题栏, 重新绘制;
等了解的窗体的更多机制以后, 或许也能从 *.style 文件中找到办法.

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

转载于:https://www.cnblogs.com/del/archive/2011/09/30/2196045.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

176页报告辟谣自动化时代的就业危机(附下载)

来源:智东西摘要:世行从新兴技术的社会影响出发,盘点劳动力市场的再培训、再就业需求,以及资本、政府的社会职责。近十年,以人工智能为代表的技术爆炸正在重塑新一轮社会经济格局。这些创新极大地改变了就业市场形势&a…

CSS3技巧 —— 渐变

CSS渐变在Webkit率先得到实现,现在Firefox 3.6也支持了,来看下各个浏览器如何实现CSS渐变效果。 Webkit 下面这行代码可用于Chrome, Safari等,它能实现线性渐变,从top(#ccc)渐变到bottom(#000)。 background: -webkit-gradient(li…

Frida hook 插件化 apk ( classloader )

From:使用 frida hook 插件化 apk:https://bbs.pediy.com/thread-258772.htm 最近拿到一个XX视频apk样本,里面有视频、直播和小说,没有VIP只能试看30秒,刚好最近学习frida,用来练习下,分析过程中…

MIT开发出新界面系统 操作员可用思维控制机器人

来源:VentureBeat、网易科技摘要:麻省理工学院(MIT)下属计算机科学与人工智能实验室(CSAIL)的研究人员开发了一种新界面,它可以读取人类操作人员的脑电波,让他们通过思维命令机器执行任务。据VentureBeat报道,用思维控…

div下图片自适应解决方法

我们(特别是像我一样的菜鸟)经常会遇到一个问题——图片自适应。这个问题是很普遍的。在文章区,在论坛,可以这么说:哪儿需要上传图片,哪儿就存在这个问题,而论坛上也不时有人询问。为什么&#…

windows 远程执行 cmd 命令的 9 种方法

一、远程执行命令方式及对应端口:  IPC$AT 445  PSEXEC 445  WMI 135  Winrm 5985(HTTP)&5986(HTTPS) 二、9种远程执行cmd命令的方法: 1.WMI执行命令方式,无回显: wmic /node:192.168.1.158 /user:pt007 /password:admin123 process call …

不要指望未来科学的发展会改变元素周期表的形式

来源:陈敏伯科学网博客摘要:对于自然界的许多规律,哪怕我们对其物理具体内容还不知道、实验证据还不足,但是可以单凭问题中明显可见的对称性质,就可以从理论上演绎出一些重要结论。很长时间以来,化学界关于…

CSS教程--CSS背景

CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果。 CSS 在这方面的能力远远在 HTML 之上。 背景色 可以使用 background-color 属性为元素设置背景色。这个属性接受任何合法的颜色值。 这条规则把元素的背景设置为灰色: p {background-c…

Appium 简明教程

转载:Appium 简明教程:http://www.testclass.net/appium https://www.cnblogs.com/fnng/p/4540731.html Appium 官网:http://appium.io/ Github 地址:https://github.com/appium/appium 主要包括以下几部分: appium新…

陈俊龙:从深度强化学习到宽度强化学习—结构,算法,机遇及挑战

来源:AI科技评论摘要:如何赋予机器自主学习的能力,一直是人工智能领域的研究热点。强化学习与宽度学习如何赋予机器自主学习的能力,一直是人工智能领域的研究热点。在越来越多的复杂现实场景任务中,需要利用深度学习、…

Web.Config文件配置之数据库连接配置

Web.Config文件以XML形式存在于ASP.NET应用程序中,是ASP.NET应用程序的配置文件,包含程序调试、会话和全球化设置等配置信息,可以直接用记事本打开进行编辑。下面通过实例说明如何配置Web.Config文件。 一、配置Access数据库连接 Access数据库…

pyspider 安装 和 快速开始

From:官方文档 --- 快速开始:http://docs.pyspider.org/en/latest/Quickstart/ pyspider github 地址:https://github.com/binux/pyspider pyspider 官方文档:http://docs.pyspider.org/en/latest/ 爬虫框架 pyspider个人总结&…

【干货】强化学习介绍

作者 | Thomas Simonini编译 | 专知整理 | Yongxi摘要:由于Alpha Go的成功,强化学习始终是人们谈论的焦点。现在Thomas Simonini在国外blog网站上发布了系列强化学习教程,以下是本系列的第一篇,简单介绍了强化学习的基本概念。An …

[VBA] 设置行高和列宽,以及全选单元格

一、用VBA设置行高和列宽 1、将选定区域内各单元格的行高和列宽设置为指定的数值: Sub SetSpecified()With ActiveWindow.RangeSelection.ColumnWidth 2.RowHeight 10End With End Sub2、将选定区域内各单元格的行高和列宽调整为最合适的值: Sub…

爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战

From:https://piaosanlang.gitbooks.io/spiders/content/ scrapy-cookbook :https://scrapy-cookbook.readthedocs.io/zh_CN/latest/index.html 1. 爬虫框架 Scrapy 爬虫框架中比较好用的是 Scrapy 和 PySpider。 PySpider 优点:分布式框架&a…

传粉飞行器是拯救传粉昆虫危机的利器还是毁灭者

来源:陈华燕的科学网博客摘要:近年来科学家陆续发现,传粉昆虫正在面临着重重危机,至少在欧洲和北美已发现传粉昆虫的数量正在逐渐下降。近年来科学家陆续发现,传粉昆虫正在面临着重重危机,至少在欧洲和北美…

字符串比较函数实现,超简单的面试题,回过头来发现原来我的c多么的薄弱

今天某个公司面试&#xff0c;尽管报了个测试类的&#xff0c;但是面试依旧不给力&#xff0c;先是写个字符串比较函数&#xff0c;只判断相等和不相等的情况&#xff0c;当时大概这么写的&#xff1a; #include<stdio.h>bool strCompare(char *str1,char *str2){char *s…

思略特报告解读:智能制造企业如何实现数字化?

来源&#xff1a;亿欧智库摘要&#xff1a;全球制造业已经将数字化运营或者工业4.0提上日程&#xff0c;基于此&#xff0c;思略特调研了1100多为企业高管&#xff0c;了解他们对数字化的看法。根据调研&#xff0c;总结了四大业务生态体系&#xff1a;客户解决方案体系、运营体…

爬虫教程( 4 ) --- 分布式爬虫 scrapy-redis、集群

1、分布式爬虫 scrapy - redis scrapy 分布式爬虫 文档&#xff1a;http://doc.scrapy.org/en/master/topics/practices.html#distributed-crawls Scrapy 并没有提供内置的机制支持分布式(多服务器)爬取。不过还是有办法进行分布式爬取&#xff0c; 取决于您要怎么分布了。 …

京东计划狂招2万人

京东明年招聘2万人&#xff0c;招聘人数是现有7000名员工的近三倍&#xff0c;比百度和腾讯的员工总和还多●京东王恩斌透露&#xff0c;除了技术人才与后备人才外&#xff0c;招聘的很大部分是物流配送人才●京东将在成都、北京、上海、广州自购土地建仓库&#xff0c;成都仓库…