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

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,开发语言)