使用DevExpress控件,缺省有三个皮肤:Blue、Black、Silver,能看到三种效果,不错。
然后,就没有然后了,无论怎样改皮肤名称,在设计状态下能看到期望状态,但运行时还是只有这三种状态。
分析原因,应该是自己生成的可执行程序下,没有皮肤资源内容。
先找皮肤资源内容,这个很容易就找到了,在C:UsersDrGraphDocumentsDevExpress VCLExpressSkins Library目录下
拷贝到目标程序目录下
不行啊,木有效果。
GOOGLE一下,发现一篇文章:
1.引用Dll皮肤文件
1 Type
2 procedure SetSkin(skinnam:string);
3
4
5
6 procedure TFrmMain.SetSkin(skinnam:string);
7 var
8 Hinst:THANDLE;
9 RStream:TResourceStream;
10 begin
11 Hinst:=Loadlibrary('ALLSK.dll');
12 If Hinst=0 Then
13 Exit
14 else
15 begin
16 Rstream:=TResourceStream.Create(Hinst,skinnam,'MYSKIN');
17 dxSkinsUserSkinLoadFromStream(Rstream);
18 dxSkinController1.NativeStyle:=False;
19 dxSkinController1.UseSkins:=True;
20 end;
21 end;
22
23
24
25 procedure TFrmMain.Button1Click(Sender: TObject);
26 begin
27 setskin('Office2007Blue');
28 end;
2.有效减小使用皮肤后软件体积巨大的方法:
一. DELPHI的主菜单: Project -> Modify Skin Options ,弹出Project Skin Options
Editor 对话框,从列表中,只选择: UserSkin这一项,取消Enable skin Support的勾,
点OK退出. (注意:此步骤需DEV40以上版本才有效)
二. 从Dev Express 项下选择dxSkinController控件,添加到工程,设置dxSkinController1的SkinName属性设为:UserSkin ;
三. 代码:(对RES皮肤有效,在程序文件夹里需要先建一个叫Skin的文件夹)
1 procedure TFrmMain.Button1Click(Sender: TObject);
2 var str:string;
3 begin
4 str:='Xmas2008Blue.skinres'; //可自行修改
5 dxSkinsUserSkinLoadFromFile(Trim(ExtractFilePath(Application.ExeName)) + 'skin' + str);
6 dxSkinController1.NativeStyle:=False;
7 dxSkinController1.UseSkins:=True;
8 end;
按此操作,仍不行,
再找:
关于DEVExpressSkins的使用心得
最近发现好多网友对DevExpress Skins的使用不太了解所以近日研究了一下,并写出以下心得:
Q:设计时有风格,运行时没有风格?
A:这种情况主要是因为没有加单元引用,因为在设计时Skins的包已经被注册到了delphi中所以在设计时可以显示皮肤,但如果没有把单元引用加入到代码中,delphi是不会编译皮肤到你的exe中去的,所以就出现了这种问题.
1.对皮肤的引用,好像从V36开始dev把每套皮肤单独封成了包,所在在程序中我们只要加入所使用皮肤的单元引用就可以了,例如使用皮肤:Office2007Silver就要加入引用:dxSkinOffice2007Silver,以下我列出所有皮肤引用的单元:dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinValentine, dxSkinXmas2008Blue, dxSkinBlack, dxSkinBlue, dxSkinCaramel, dxSkinCoffee, dxSkinGlassOceans, dxSkiniMaginary, dxSkinLilian;
另:如果你的程序是runtime package的话,记得发布时要把相对的bpl加上。
2.对控件皮肤的引用:以上的皮肤包中只有dev基础控件的皮肤,对于大一点的控件(可选安装的)还要加入相对控的皮肤包的单元引用,例如:使用了ribbon的话就要加入dxSkinsdxRibbonPainter;使用的NavBar就要加入dxSkinsdxNavBar2Painter;使用的pageContorl就要引用dxSkinscxPCPainter;对于这类控件可以到dev的源码(skins的source目录中)中去找相印的包。
Q:Navbar怎样设置同风格库的选择一起变化?
A:原来的Navbar有自已的风格,我们只要在它的view styles中选择:SkinNavigationPaneView或SkinExploreBarView那么Navbar就会根据你设的风格改变风格了,两者的区别是前者是outlook风格的(像QQ那样),后者是组风格的(像xp的侧边栏)
Q:Ribbon怎样设置同风格库的选择一起变化?
A:这个我想可能是dev的一个bug,它是不根据风格的选择而变化的,要手动的再设置一下它的ColorSchemeName属性:设置与风格库所选的风格同名就好了。
Q:cxSplitter为什么有时有风格有时没有?
A:这可能又是一个bug,我研究了一下,在窗体上放一个cxSplitter运行时是有风格的,但什么时候没了呢,是在你右键此控件选splitter editor后就没了,解决方法是删除窗体上的风格库控件,再重新放上一个,注意(Ctrl + X Ctrl + V)是不行的,一定要放个新的。如果其它的控件也有此BUG的话可以参照此解决方法(本人还没发现有其它的)
还是不行。网上的解决方案都是DELPHI的,例子均可编译通过,但换成CB就是不行。
信心还是有的,直到看到DevExpress官方答复:
Sorry, we don't have a C++ equivalent of that code at present. In the meantime, C++Builder doesn't preclude you from including PAS units in your projects. So, we hope there should not be any serious problem in using the existing PAS code.
这叫人情何以堪!暂只能如此了。看还有没有其它办法,要是解决了这个问题,那N多的CB程序员是不是要感谢我一下了,
===================================================================================================================
今天处理皮肤未果,心有不甘,为什么DELPHI可以而CB不行?犯了技术人员的毛病,不做完老是觉得欠欠的。坐在计算机旁边,还是不自觉地继续。
别的办法没有,那就弄个小的程序来试,不就那几个属性嘛,顺序倒倒说不定就OK了。
没想到真有意外收获,在白天的基础上,居然给试出来了。想起了高考作文题,到处挖井都说没水,其实最深的一口井马上就要挖到水了。
先看几个结果
Caramel皮肤
SpringTime皮肤
(哈,顺便发现了QQ截图的一个BUG:如果要截的图在第二个屏幕上,QQ是截不到的。)
这效果,钢钢的。
一共有40种皮肤,太爽了。
最后的代码很简单:
1 SkinController->NativeStyle = false;
2 SkinController->SkinName = "UserSkin";
3 SkinController->UseSkins = true;
4 Ribbon->SupportNonClientDrawing = false;
5 Ribbon->ColorSchemeName = "UserSkin";
6 dxSkinsUserSkinLoadFromFile(THelper::GetApplicationPath() + "\res\Skins\" + colorSchemeName + ".skinres");
7 Ribbon->SupportNonClientDrawing = true;
再发几张图,自己舒服下:
Money Twins皮肤
Valentine皮肤
核心的代码已贴出,如果有什么疑问,欢迎随时沟通交流。
怎一个爽字了得!!
原文链接: https://www.cnblogs.com/drgraph/archive/2013/04/15/3022199.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84817
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!