zoukankan      html  css  js  c++  java
  • DrGraph软件升级:皮肤

    使用DevExpress控件,缺省有三个皮肤:BlueBlackSilver,能看到三种效果,不错。
    然后,就没有然后了,无论怎样改皮肤名称,在设计状态下能看到期望状态,但运行时还是只有这三种状态。
    分析原因,应该是自己生成的可执行程序下,没有皮肤资源内容。
    先找皮肤资源内容,这个很容易就找到了,在C:\Users\DrGraph\Documents\DevExpress VCL\ExpressSkins 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的源码(skinssource目录中)中去找相印的包。   
    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皮肤 

    核心的代码已贴出,如果有什么疑问,欢迎随时沟通交流。
    怎一个爽字了得!! 

  • 相关阅读:
    数据操作-对数据的增删改查-单表查询和多表查询
    爬虫从入门到放弃
    爬虫从入门到放弃
    创建表的完整语法及表之间的关系
    树链剖分练习总结
    [BZOJ]1984: 月下“毛景树”
    [BZOJ]2243: [SDOI2011]染色
    [BZOJ]4034: [HAOI2015]树上操作
    NOIP2012题解
    CODEVS4633 [Mz]树链剖分练习
  • 原文地址:https://www.cnblogs.com/drgraph/p/3022199.html
Copyright © 2011-2022 走看看