——的确正是我想要的!
——不过不知道运行时动态创建的frame及其里面的控件,也能有效吗?
http://book.chinaz.com/Delphi/Delphi%E6%B8%B8%E6%88%8F%E7%BC%96%E7%A8%8B%E5%AF%BC%E5%AD%A6/9/9.5%20VCLSkin%E7%BB%84%E4%BB%B6%E7%9A%84%E4%BD%BF%E7%94%A8.htm
VCLSkin组件的使用
VCLSkin是个方便而且功能强大的界面加强型组件包。只要在程序的任何一个窗体里加入SkinData组件,设置好相关属性,则所有这个程序里出现的窗体(包括对话框)都具有设置好的界面风格。SkinStore组件又可以把一些皮肤文件预先存在里面,供SkinData随时调用,表现出程序的多种风格。下面简单地介绍它的用法。
先建立一个新工程,加入一些常见的组件。运行结果的界面如图9.18所示。
然后加入一个SkinData控件,把Active属性设为True。再单击SkinStore属性的带省略号的按钮,选择VCLSkin自带的一个皮肤文件macos.skn。然后,编译,运行,结果如图9.19所示。
图9.18 原始程序 图9.19 加入VCLSkin组件后的效果
此处将程序界面从原来古板的样貌变成Mac Os风格没有用一行代码,只设了SkinData的属性。下面我们结合SkinStore组件讲讲程序中“换肤”的做法。
在窗体上加入一个SkinStore组件,在Object Inspector中单击Store后面的带省略号的按钮,出现如图9.20所示的窗体。
单击图标,新生成一个SkinStore,可以像上面设置SkinData的SkinStore那样设置好它的属性。创建多个SkinStore,存入多个皮肤。然后在窗体的按钮上加入如下代码(代码的作用是当程序运行中按下Button1时,SkinData1会从SkinStore1中读取第1个皮肤,并显示出来):
procedure TForm1.Button1Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,1);
end;
类似地,加入以下代码:
procedure TForm1.Button3Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,2);
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,3);
end;
“换肤”功能完成了。在程序中按下那几个按钮,程序界面的风格就会相应改变。图9.21示出了两个例子。
图9.21 VCLSkin的另两种皮肤效果
VCLSkin的功能远不止如此,我们挑几个说一下:
· DataSkin有个DisableTag属性。默认值是99。如果窗体上哪个组件的Tag值是99的话,DataSkin不会对这个组件起作用。
· 支持MDI窗体。
· 支持通用Windows对话框(打开,保存文件等)。
· SkinControls属性可以设置对哪类控件起作用。
· 在一个程序中不同窗体可以有不同皮肤风格。