DevExpress VCL 动态加载皮肤换肤示例,支持Ribbion

编译环境为:Delphi XE 3 + DevExpress VCL 2012.1.6 + WIN 7


Delphi精简版下载参见:http://blog.csdn.net/maxwoods/article/details/8305861

Delphi XE 3 下载参见:http://blog.csdn.net/maxwoods/article/details/8303039

DevExpress VCL下载参见:http://blog.csdn.net/maxwoods/article/details/8303127



主要实现代码如下:

implementation

{$R *.dfm}

uses dxSkinsDefaultPainters, dxSkinsdxRibbonPainter;

procedure TFormMain.btn1Click(Sender: TObject);
begin
  dxrbn1.ColorSchemeName := 'UserSkin';
  dxSkinsUserSkinLoadFromFile('.\AllSkins.skinres', cxComboBox1.Text);
  dxrbn1.ColorSchemeName := cxComboBox1.Text;
  dxrbn1.Update;
end;

procedure TFormMain.FormCreate(Sender: TObject);
begin
  Position := TPosition.poScreenCenter;
  dxSkinController1.NativeStyle := false;
  dxSkinController1.SkinName := 'UserSkin';
  dxSkinController1.UseSkins := true;
  dxrbn1.SupportNonClientDrawing := false;
  dxrbn1.Style := TdxRibbonStyle.rs2010;
  dxrbn1.ColorSchemeName := 'UserSkin';
  cxComboBox1.Clear;
  cxComboBox1.Properties.DropDownListStyle :=
    TcxEditDropDownListStyle.lsFixedList;
  dxSkinsUserSkinPopulateSkinNames('.\AllSkins.skinres',
    cxComboBox1.Properties.Items);
  cxComboBox1.ItemIndex := 0;
  dxSkinsUserSkinLoadFromFile('.\AllSkins.skinres', cxComboBox1.Text);
end;

end.

在主窗体上放一个dxSkinController即可实现对DevExpress 控件的换肤控制,其关键点在于,SkinName属性要设置为'UserSkin',UseSkins属性为True。对于Ribbion控件,经实际测试,要在换肤前将其ColorSchemeName设置为'UserSkin',加载皮肤后,再将其ColorSchemeName设置为皮肤的名称,否则可能看不到效果。需要注意的是如果使用Ribbioin控件的SuppoerNoneClientDrawing属性为True,进行非客户区绘制(窗体从TdxRibbonForm继承,本例中是从TdxSkinForm继承),显示会不正常。


本例使用了外部皮肤加载,将皮肤资源文件'AllSkins.skinres'进行动态加载,该文件包含DevExpress控件官方自带的所有皮肤,以减小可执行文件大小。dxSkinsUserSkinPopulateSkinNames用于将皮肤资源文件中的所有皮肤枚举到StringList中,dxSkinsUserSkinLoadFromFile用于从皮肤资源文件中加载指定名称的皮肤。

程序运行效果如下:



源代码下载:http://www.ctdisk.com/file/16991803

你可能感兴趣的:(Delphi)