打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
将Dev的皮肤封装在包中
 

将Dev的皮肤封装在包中

http://blog.csdn.net/henreash/article/details/7073356

分类: Delphi 86人阅读 评论(0) 收藏 举报
 Dev的皮肤导致编译的执行文件比较大,所以如果能将皮肤代码封装在包中,在需要的时候以插件的形式载入,则不会影响执行文件的尺寸了.通过测试发现把如下单元加入到运行时包中,并在主程序中调用LoadPakage函数加载包即可实现皮肤切换,如果希望使用皮肤则同时发布包,不使用皮肤则主程序文件大小也不会受到影响.

unit LoadDevSkin;

interface

uses Windows, Classes, SysUtils, Forms, Menus, dxSkinsForm, dxSkinsCore,
  cxGraphics, cxControls, cxLookAndFeelPainters, cxStyles, cxCustomData,
  cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses,
  cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
  cxGrid;

type

  TDevSkinUtils = class
  private
    class procedure OnSkinMenuClick(Sender: TObject);
  public
    class procedure LoadSkin;
  end;

implementation

uses
  dxSkinsDefaultPainters;

const
  CSKINFILE = 'AllSkins.dll';//Dev的完整皮肤文件,修改了文件名称

class procedure TDevSkinUtils.OnSkinMenuClick(Sender: TObject);
var
  sSkinFile, sSkinName: string;
begin
  sSkinFile := ExtractFilePath(ParamStr(0)) + CSKINFILE;
  sSkinName := StringReplace(TMenuItem(Sender).Caption, '&', '', [rfReplaceAll]);
  sSkinName := StringReplace(sSkinName, ' ', '', [rfReplaceAll]);
  //TdxSkinController(Application.MainForm.FindComponent('dxSkinController1')).SkinName := 'UserSkin';
  dxSkinsUserSkinLoadFromFile(sSkinFile, sSkinName);

end;

class procedure TDevSkinUtils.LoadSkin;
var
  dxSkinController1: TdxSkinController;
  pmSkins: TPopupMenu;

  procedure LoadDevSkins;
  var
    sSkinFile: string;
    oList: TStringList;
    i: Integer;
    oMenuItem: TMenuItem;
  begin
    sSkinFile := ExtractFilePath(ParamStr(0)) + CSKINFILE;
    dxSkinsUserSkinLoadFromFile(sSkinFile, '');
    dxSkinController1.NativeStyle:=False;
    dxSkinController1.UseSkins:=True;
    dxSkinController1.SkinName := 'UserSkin';
    oList := TStringList.Create;
    try
      dxSkinsUserSkinPopulateSkinNames(sSkinFile, oList, True);
      for I := 0 to oList.Count - 1 do
      begin
        oMenuItem := TMenuItem.Create(pmSkins);
        oMenuItem.Caption := oList[i];
        oMenuItem.OnClick := OnSkinMenuClick;
        pmSkins.Items.Add(oMenuItem);
      end;
    finally
      oList.Free;
    end;
  end;
 
begin
  dxSkinController1 := TdxSkinController.Create(Application.MainForm);
  pmSkins := TPopupMenu.Create(Application.MainForm);
  Application.MainForm.PopupMenu := pmSkins;
  LoadDevSkins;
end;

initialization
  TDevSkinUtils.LoadSkin;

end.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DevExpress.Winform之更换主题 - 544904950的日志 - 网易博客
Delphi 中控制 Word,xml,dll 等操作
delphi中关于tapplication类的详解
C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
ADOQuery数据集对象池
ObjectBuilder技术内幕(三)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服