应用程序要想长得好看,除了布局合理,还需要好的皮肤。就象一个美女,如果空有一副好身材,但是皮肤不好,全是麻点大包,观感也不会好到那里去。
早期的应用程序的换肤大法,主要由第三方控件来解决,出名的有 VCLSkin、AlphaControls 等等。但新版的 Delphi 直接内置了美容换肤大法,VCL 应用程序是 VCLStyle,FMX的应用程序称之为 FMXStyle。
首先我们了解下如何使用皮肤:
1、VCL 应用程序
- 进入 Project -> Options -> Application -> Appearance ,然后选择要启用的皮肤列表,并在 Default Style 下拉列表中选择一个做为默认的皮肤,然后直接运行程序,程序就会换成指定的皮肤。
- 要在运行时更换皮肤,则需要引用单元文件 Vcl.Themes,然后利用函数 TStyleManager 的相关函数和属性来完成换肤。
- 通过 TStyleManager.StyleNames 属性数组可以枚举所有已经注册的皮肤名称;
- 通过 TStyleManager.SetStyle 函数可以设置一个选中的样式;
- TStyleManager 的各个属性和方法都是类方法,所以不需要创建 TStyleManager 的实例即可使用;
- TStyleManager 同样提供了从文件或资源中加载皮肤的方法,不过从流中加载皮肤的方法却没有提供(内部使用了内存流加载,但没公开类似的方法)。
一段参考代码:
//切换为选中的皮肤 procedure TForm2.ComboBox1Change(Sender: TObject); begin TStyleManager.SetStyle(ComboBox1.Text); end; //获取已注册的皮肤列表 procedure TForm2.FormCreate(Sender: TObject); var I:Integer; begin for I := 0 to High(TStyleManager.StyleNames) do ComboBox1.Items.Add(TStyleManager.StyleNames[I]); end;
2、FMX 应用程序
FMX 应用程序目前还享受不到 VCL 程序的这般待遇,它需要你在窗体上放置一个 TStyleBook 控件,然后设置窗体的StyleBook 为相应的控件即可。至于换肤可以真接从文件或资源中加载,这个可以参考以前写的一篇文章:[FMX] 换肤术 – 使用 TStyleBook 动态加载皮肤样式
那么换妆都基本了解了,那么这些化妆品从那里来呢,一些是系统自带的,它位于安装目录的 Redist\styles 里。如果想要自己修改皮肤,可以用 Tools -> Bitmap Style Designer 来修改,如果直接在其中编辑修改不方便,那么自己导出 Images 下的图片,然后在 Photoshop 编辑修改后再导入到原来的皮肤中另存下就OK了。FMX的皮肤设计,使用上文中的 FMX Style Designer 设计当然是不二的选择,而且 XE8 的 FMX Style Designer 的稳定性比 XE7 稳定多了,没有那么坑爹了。