合并Dev BPL教程

一、准备工具

1.Devexpress vcl 14.1.3

下载地址http://download.csdn.net/user/rfjbco,共用个包,下载后解压,程序目录已带有DxAutoInstaller

2.DxAutoInstaller 
最新版下载地址http://forum.delphier.com/forum.php?mod=viewthread&tid=2&extra=page%3D1

二、安装控件

打开DxAutoInstaller ,选择Dev安装路径

按Install,开始安装,安装时会把已经装的版本卸载并安装,生成类似如下的日志

----------------------------------------------------------------------------------------------------
Copying Files: E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\ExpressCore Library\Sources\*.*
----------------------------------------------------------------------------------------------------
Compiling package E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\ExpressCore Library\Packages\dxCoreRS21.dpk
D:\SoftGreen\DelphiXE7\bin\dcc32.exe "E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\ExpressCore Library\Packages\dxCoreRS21.dpk" --no-config -U"D:\SoftGreen\DelphiXE7\lib\Win32\release" -LN"C:\Users\Public\Documents\Embarcadero\Studio\15.0\Dcp" -LE"C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl" -$D- -$L- -$Y- -Q -U"C:\Users\Public\Documents\Embarcadero\Studio\15.0\Dcp" -U"E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\Library\Sources" -R"E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\Library\Sources" -B -NU"E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\Library\RAD Studio XE7" -N0"E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\Library\RAD Studio XE7" -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE -NSWinapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;IBX;VclTee; -DUSENATIVELOOKANDFEELASDEFAULT
Embarcadero Delphi for Win32 compiler version 28.0
Copyright (c) 1983,2014 Embarcadero Technologies, Inc.
16227 lines, 0.17 seconds, 109300 bytes code, 1924 bytes data.
Compilation success
。。。。。。。。。。

拷贝此日志

三、生成合并的BPL

思路:提取所有运行时控件包中的contains中的内容,合并在一起。

我写了一个工具,用于提取运行时控件中的contains,后面附上源码

把DxAutoInstaller 生成的日志拷到下面这个程序的右上角框,然后点“提取dpk包”按钮,会把所有的dpk提取出来到左下框,然后再按”提成包含文件“,则把运行时dpk的contains内容提成到右边的框。拷贝右边拷的内容

四、生成合并后的Dev包

新建一个包项目,配置如下,保存到\DevExpressVcl_14.1.3\Library\Sources下

把上面提取出来的包含文件拷进去,用不到的控件包,去掉即可。

Release模式编译,如果提示如下

点Cancle即可。

生成出来Dev.bpl大概30M左右,再用AsPack压缩,大小15M左右

五、例子

新建一个项目,配置如下

再放一堆Dev控件上去,效果如下

工具源码,不能上传附件,这里附上代码

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Xml.xmldom, Xml.XMLIntf,
  Xml.Win.msxmldom, Xml.XMLDoc;

type
  TFrmMain = class(TForm)
    MemoGroupFile: TMemo;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    XMLDocument1: TXMLDocument;
    Memo2: TMemo;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    GroupPath:string;
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;

implementation

{$R *.dfm}

procedure TFrmMain.Button1Click(Sender: TObject);
begin
//提取项目组文件
//  OpenDialog1.InitialDir := ‘E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3‘;
//  OpenDialog1.FileName:=‘E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\DelphiXE7.groupproj‘ ;
//  if OpenDialog1.Execute then
//  begin
//    MemoGroupFile.Lines.Clear;
//    //MemoGroupFile.Lines.LoadFromFile(OpenDialog1.FileName);
//    XMLDocument1.LoadFromFile(OpenDialog1.FileName);
//    MemoGroupFile.Lines:=XMLDocument1.XML;
//
//    self.Caption:=OpenDialog1.FileName;
//    GroupPath:= ExtractFilePath(OpenDialog1.FileName); //文件夹后面带/
//  end;
end;

procedure TFrmMain.Button2Click(Sender: TObject);
var
//  nodeList: IXMLNodeList;
//  node: IXMLNode;
  num,i: Integer;
//  str:string;
begin
//根据项目组,提取dpk文件
//  nodeList := XMLDocument1.DocumentElement.ChildNodes[1].ChildNodes;
//  num := nodeList.Count;
//  Memo1.Lines.Clear;
//  for i := 0 to num - 1 do
//  begin
//    node := nodeList[i];
//    str:=node.Attributes[‘Include‘];
//    str:=GroupPath+ StringReplace(str,‘dproj‘,‘dpk‘,[rfReplaceAll]);
//    Memo1.Lines.Add(str);
//  end;
  Memo1.Lines.Clear;
  for i := 0 to MemoGroupFile.Lines.Count-1 do
  begin
    if Pos(‘Compiling package ‘,MemoGroupFile.Lines[i])>0 then
      Memo1.Lines.Add(StringReplace(MemoGroupFile.Lines[i],‘Compiling package ‘,‘‘,[]));
  end;

end;

procedure TFrmMain.Button3Click(Sender: TObject);
var
  aFile:TStrings;
  i,j:Integer;
  CurPackName, PackName:string;
  IsAdd:Boolean;
begin
  aFile:=TStringList.Create;
  PackName:=‘‘;
  CurPackName:=‘‘;
  Memo2.Lines.Clear;
  GroupPath :=‘E:\DelphiPackages\DelphiXE7\DevExpressVcl_14.1.3\‘;
  for I := 0 to Memo1.Lines.Count-1 do
  begin
    //提取控件包名
    CurPackName:=StringReplace(Memo1.Lines[i],GroupPath,‘‘,[rfReplaceAll]);
    CurPackName:=Copy(CurPackName,0,Pos(‘\‘,CurPackName)-1);

    IsAdd:=False;

    aFile.LoadFromFile(Memo1.Lines[i]);
    if Pos(‘{$RUNONLY}‘,aFile.Text)>0 then //只提取运行时包
    begin
      if CurPackName<>PackName then
      begin
        if i<>0 then Memo2.Lines.Add(‘‘);
        Memo2.Lines.Add(‘  //‘+CurPackName);
      end;
      for j := 0 to aFile.Count-1 do
      begin
        if aFile[j]=‘contains‘ then
        begin
          IsAdd:=True;
          Continue;
        end;
        if IsAdd then
        begin
          if Pos(‘;‘,aFile[j])>0 then IsAdd:=False;
          Memo2.Lines.Add(StringReplace(aFile[j],‘;‘,‘,‘,[rfReplaceAll]));
        end;
      end;
      PackName:=CurPackName;
    end;
  end;
  i:=Memo2.Lines.Count;
  Memo2.Lines[i-1]:= StringReplace(Memo2.Lines[i-1],‘,‘,‘;‘,[rfReplaceAll]) ;

end;

end.

unit1.pas

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = ‘Form1‘
  ClientHeight = 357
  ClientWidth = 764
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ‘Tahoma‘
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object cxFilterControl1: TcxFilterControl
    Left = 24
    Top = 8
    Width = 153
    Height = 89
    TabOrder = 0
  end
  object cxTabControl1: TcxTabControl
    Left = 216
    Top = 0
    Width = 209
    Height = 121
    TabOrder = 1
    Properties.CustomButtons.Buttons = <>
    Properties.TabIndex = 0
    Properties.Tabs.Strings = (
      ‘asdf‘
      ‘asd‘
      ‘fa‘
      ‘df‘
      ‘asdf‘)
    ClientRectBottom = 117
    ClientRectLeft = 4
    ClientRectRight = 205
    ClientRectTop = 24
  end
  object cxGrid1: TcxGrid
    Left = 8
    Top = 149
    Width = 250
    Height = 200
    TabOrder = 2
    object cxGrid1DBTableView1: TcxGridDBTableView
      Navigator.Buttons.CustomButtons = <>
      DataController.Summary.DefaultGroupSummaryItems = <>
      DataController.Summary.FooterSummaryItems = <>
      DataController.Summary.SummaryGroups = <>
    end
    object cxGrid1Level1: TcxGridLevel
      GridView = cxGrid1DBTableView1
    end
  end
  object cxScheduler1: TcxScheduler
    Left = 431
    Top = 8
    Width = 350
    Height = 250
    ViewDay.Active = True
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = ‘Tahoma‘
    Font.Style = []
    TabOrder = 3
    Splitters = {
      CE0000007E0000005D01000083000000C900000001000000CE000000F9000000}
    StoredClientBounds = {01000000010000005D010000F9000000}
  end
  object cxHeader1: TcxHeader
    Left = 336
    Top = 168
    Width = 25
    Height = 25
    Sections = <>
  end
  object cxShellListView1: TcxShellListView
    Left = 280
    Top = 199
    Width = 250
    Height = 150
    TabOrder = 5
  end
  object cxButton1: TcxButton
    Left = 576
    Top = 288
    Width = 75
    Height = 33
    Caption = ‘cxButton1‘
    TabOrder = 6
  end
  object cxScrollBox1: TcxScrollBox
    Left = 280
    Top = 127
    Width = 185
    Height = 41
    TabOrder = 7
  end
  object cxTextEdit1: TcxTextEdit
    Left = 56
    Top = 122
    TabOrder = 8
    Text = ‘cxTextEdit1‘
    Width = 121
  end
end

unit1.dfm

时间: 2024-10-10 04:24:28

合并Dev BPL教程的相关文章

多个PDF文件怎么合并?PDF合并的方法教程

多个PDF文件怎么合并?在我们的工作中,不可避免的就是将多个PDF文件合并成一个PDF文件,对于经常使用PDF文件的人来讲确实不是什么难事,但是对于一些小白来说就比较困难,那么今天就来仔细讲一讲多个PDF文件合并的方法教程.方法一:迅捷PDF编辑器1:首先将PDF编辑器https://www.xunjiepdf.com/editor安装到自己的电脑中,打开迅捷PDF编辑器将文件添加进去.2:在软件的顶部找到文档,点击文档在下面可以找到插入页面,将鼠标移动到插入页面处,在右侧可以找到插入页面.3:

iOS 自己封装的SDK 打包与合并,新手教程!!!

前言 (1)这个时候就得说下静态库,动态库区别.           静态库:1.模块化,分工合作.2.避免少量改动经常导致大量的重复编译链接.3.也可以重用,注意不是共享使用.           动态库:1.使用动态库,可以将最终可执行文件体积缩小.2.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源.3.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 备注:苹果禁用动态库,即你使用了动态库,审核也是不让通过的. (2)静态库又分为:fra

TortoiseSVN 合并操作简明教程

下列步骤展示了如何将分支A中的修改合并到分支B. 1.在分支B的本地副本目录中选择"合并(Merge)". 2.选择“合并一个版本范围(Merge a range of revisions)”,点击下一步. 3.输入分支A的svn服务器端路径(注意:此路径应与步骤1中的分支B本地路径相对应). 4.选择需要合并的修改内容,并点击下一步. 5.合并(Merge) 6.解决冲突(如果有的话),提交代码.完成!

使用TortoiseSVN新建及合并分支图文教程

打开trunks目录,在trunks目录下新建两个文本文件A.java,B.java: 打开A.java输入以下内容: B.java文件可以随机输入些,本例中主要用于观察后续是否变化. 两个文件编辑完成后使用SVN Commit将更改提交到SVN: 下面开始创建分支: 1.在trunks上点击右键,在TortoiseSVN菜单中选择Branch/Tag; 2.在To path输入框中输入新建分支的路径,一般是:/branches/分支名,也就是相当于分支保存的路径名; 3.在下面选择HEAD r

Git使用教程(转载)

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是

Git超级实用使用教程

一篇git入门实用教程,原文地址http://www.cnblogs.com/tugenhua0707/p/4050072.html 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度

Git使用教程(转载)

Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑

转: git的图文使用教程(巨详细)

转自: http://blog.jobbole.com/78960/ Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了.

Git的入门教程&lt;四&gt;

Git 的入门教程<四> 5> git分支的管理 git默认的有一个主分支叫做master,随着每次的提交,master主分支会形成一条线,而HEAD是指向当前的主分支master的,一般来说,我们将master分支作为向外发布的主分支,而开发的时候会新建一个分支或者好多分支,作为开发分支,等到开发分支完成,在一次性的想master主分支上合并,并进行发布. 5.1 git 分支的创建.删除.切换 git branch dev //创建分支 git checkout dev //切换分支