📄 chapt10.htm
字号:
<html><head><title>第十章 包</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#00000" text="#00cc66"><p align="center"><b><font size="4" color="#FF3366">第十章 包 </font></b></p><p><b> 10.1 包 概 述</b><br> 包是一种特殊的动态链接库。包可以用于Delphi应用程序,也可以用于IDE环境,或两者都可使用。包分为两大类:一类是运行期包,另一类是设计期包。运行期包是在程序运行时使用的,设计期包是在程序设计时使用的。一个包既可以用作运行期包也可用作设计期包。设计期包经常通过运行期包来发挥作用。<br> 包包含完整的可视构件库以及其它对象、函数、过程等。与其它运行库相同,包包含的代码可以在程序之间共享。例如,经常使用的Delphi构件驻留在叫做VCL50的包中。每当你创建程序时,可以指定使用VCL50包,这样当对该程序进行编译时,执行程序只包含自己需要的代码和数据,而公共代码存放在VCL50.BPL中。如果一台计算机中有多个程序都使用包,则该计算机中只需要一份VCL50.BPL的拷贝。VCL50.BPL被所有程序共享,包括IDE本身。<br> 通常,一个500KB的可执行程序可以减少到15KB左右。<br> 选择View | Project Manager。 当Project Manager对话框出现并打开Project Options对话框时,用鼠标点出Project Options按钮;为打开对包的支持,在Project对话框中选择Packages标签,选择“Buildwith runtime Packages”复选框,再点击“OK”按钮。 <br> <b>10.2 运 行 期 包</b><br> 运行期包随Delphi应用程序一起分发,并在程序运行时发挥作用。<br> 要运行一个使用包的程序,计算机必须既装有应用程序的.EXE文件,还必须安装应用程序使用的包文件 (.BPL文件)。包文件必须存放在应用程序使用的系统路径下,并且版本符合应用程序的要求。<br> Delphi出厂时包含了一些预编译好的运行期包。这些包包含了大多数通用对象、构件,是编写窗体、按钮和控制、打印等应用程序经常要用到的。要想知道包含在每一个BPL中的对象和构件的更详细的说明,可参阅Delphi的联机帮助和指南。<br> 下表列出一些预编译好的运行期包及其包含的单元。<br> 包 包含单元<br> VCL50.BPL Ax, Buttons, Classes, Clipbrd, Comctrls, Commctrl, Commdlg, <br> Comobj,Comstrs, Consts, Controls, Ddeml, Dialogs, Dlgs, Dsgnintf, <br> Dsgnwnds,Editintf, Exptintf, Extctrls, Extdlgs, Fileintf, Forms, <br> Graphics, Grids,Imm, IniFiles, Isapi, Isapi2,Istreams, Libhelp, Libintf, <br> Lzexpand, Mapi, Mask, Math, Menu,Messages, Mmsystem, Nsapi, Ole2I, <br> Oleconst, Olectnrs, Olectrls,Oledlg, Penwin, Printers, Proxies, <br> Registry, Regstr, Richedit, Shellapi,Shlobj, Stdctrls, Stdvcl, Sysutils, <br> Tlhelp32, Toolintf, Toolwin, Typinfo,Vclcom, Virtintf, Windows, Wininet, <br> Winsock, Winspool, Winsvc <br> VCLX50.BPL Checklst, Colorgrd, Ddeman, Filectrl, Mplayer, Outline, <br> Tabnotbk, Tabs<br> VCLDB50.BPL Bde, Bdeconst, Bdeprov, Db, Dbcgrids, Dbclient, Dbcommon, <br> Dbconsts,Dbctrls, Dbgrids, Dbinpreq, Dblogdlg, Dbpwdlg, Dbtables, <br> Dsintf,Provider, SMintf<br> VCLDBX50.BPL Dblookup, Report<br> DSS50.BPL Mxarrays, Mxbutton, Mxcommon, Mxconsts, Mxdb, Mxdcube,Mxdssqry, <br> Mxgraph, Mxgrid, Mxpivsrc, Mxqedcom, Mxqparse,Mxqryedt, Mxstore, <br> Mxtables, Mxqvb<br> QRPT50.BPL Qr2const, Qrabout, Qralias, Qrctrls, Qrdatasu, <br> Qrexpbld, Qrextra,Qrprev, Qrprgres, Qrprntr, Qrqred32, Quickrpt<br> TEE50.BPL Arrowcha, Bubblech, Chart, Ganttch, Series, Teeconst, <br> Teefunci,Teengine, Teeprocs, Teeshape<br> TEEDB50.BPL Dbchart, Qrtee<br> TEEUI50.BPL Areaedit, Arrowedi, Axisincr, Axmaxmin, Baredit, Brushdlg, <br> Bubbledi,Custedit, Dbeditch, Editchar, Flineedi, Ganttedi, Ieditcha, <br> Pendlg,Pieedit, Shapeedi, Teeabout, Teegally, Teelisb, Teeprevi, <br> Teexport<br> VCLSMP50.BPL Sampreg, Smpconst<br> 你可以把定制的包加入到Delphi,这些包可以是你自己创建的,或者是向第三方供应商定购的。定制包的使用与运行期包一样,必须分发并安装在用户计算机上。要在程序中使用包,可以采取下列步骤:<br> (1)在IDE装入或创建一个项目。<br> (2)选择Project|Options命令,打开.Project Options对话框,选择Packages标签。<br> (3)在Packages页下面的一个矩形框是运行期包区。其中“Build withRuntime Packages”复选框用于决定在执行程序编译时是否使用运行期时包。下面的编辑框用于指定要在项目中使用哪些包。与设计期包有关的运行期包已经列在编辑框中。<br> (4)选择“Build with Runtime Packages”复选框,并在编辑框手工输入一个或多个包名。输入的包名用分号隔开,并且只需要名称,不使用扩展名。例如,VCL50;VCLDB50;VCLDBX50。<br> (5)输入包名的另外一种方法是使用“Add”按钮。使用“Add”按钮打开“Add Runtime Package”对话框,在“package name ”输入包名,或选择“browse”按钮寻找需要的包。当单击“OK”后,“package name ”中的包名将添加到包名编辑框中。 <br> 包名编辑框中列出的包名将自动编译到当前项目中。如果编辑框中包名有重复,重复的包名将被忽略;如果编辑框是空的,则当前项目没有包。<br> 通常情况下,在包名编辑框中列出的包只对当前项目有效。要使当前的选择成为任何新项目的缺省包,选择“Defaults”复选框。<br> <b>10.3 设 计 期 包</b><br> 设计期包,用于在Delphi的IDE 构件板上安装构件或用于在定制的构件中创建具有专用特性的编辑器。<br> Delphi出厂时在IDE预装了部分设计期包。下表列出了这些包及其包含的构件板页。 <br> 包 对应构件板页<br> DCLSTD50.BPL Standard, Additional, System, Win32, Dialogs<br> DCLTEE50.BPL Additional (TChart component)DCLDB50.BPLData Access, Data <br> Controls<br> DCLMID50.BPL Data Access (MIDAS)<br> DCL31W50.BPL Win 3.1<br> DCLNET50.BPL,NMFAST50.BPL Internet<br> DCLSMP50.BPL Samples<br> DCLOCX50.BPL ActiveX<br> DCLQRT50.BPL QReport<br> DCLDSS50.BPL Decision Cube<br> IBSMP50.BPL Samples (IBEventAlerter component)<br> DCLINT50.BPL (International Tools--Resource DLL wizard)<br> RCEXPERT.BPL (Resource Expert)<br> DBWEBXPRT.BPL (Web Wizard)<br> 设计期包通常要调用运行期包,例如DCLSTD50就引用了VCL50。<br> 除了预先安装的设计期包外,你可以把定制的构件包加入到Delphi的IDE,这些包可以是你自己创建的,或者是向第三方供应商定购的。新构件装入时,通常放在DCLUSR50设计期包内。要安装定制的构件,可以采取下列步骤:<br> (1)如果要安装一个新包,将包文件拷贝到一个本地目录下。包文件包括.BPL、.DCP、 和.DCU文件等。其中存放.DCP和 .DCU文件的目录必须在Delphi库路径下。<br> (2)选择IDE中Component|Install Packages菜单命令,打开. Project Options对话框,(或者使用Project|Options命令打开图10.1所示的 ProjectOptions对话框)。 <br> (3)对话框上面一个矩形框线围住的是Design Packages区。在“Designpackages”框中列出了所有可供选择的设计期包。用鼠标单击清单中的一项,在此清单下面的状态区中就会显示相应的路径和BPL文件名。包左边的复选框用于决定是否安装该设计期包。选择表示安装,不选择表示不安装。<br> 这个框里也包含Add,Remove和Edit按钮,使你能够增加、清除和编辑在设计时使用的包。“components”按钮显示包含在被选中设计期包中的各个构件。<br> (4)单击“OK”。选择包中的构件将自动安装到IDE的构件板。通常情况下,选择的包只对当前项目有效。要使当前的选择成为任何新项目的缺省包,选择“Defaults”复选框。<br> 如果要安装包,但不需要包中的某个构件,可选择Component|ConfigurePalette菜单命令,重新配置构件板,详细介绍请参考第二章中关于IDE的介绍 。<br> <b>10.4 建立自己的包</b><br> Delphi为用户建立自己的包提供了向导,因此建立包的过程很简单。<br> <b>10.4.1 准备工作</b><br> 要创建一个包,事先要做好下列准备工作:<br> (1)为包取一个名字。<br> (2)确定包需要的其它包的列表,即包的Require部分包含的包。<br> (3)包包含的单元列表,即包的Contain部分使用的单元。包实际上就是各种独立单元的包容器,包的功能通过这些单元体现出来。因此,在建立包之前,首先要确保这些单元没有错误,必要的话,使用内部集成的调试器调试这些单元。<br> <b>10.4.2 建立包的一般步骤</b><br> (1)选择 File|New菜单命令,在“New Items对话框,选择“Package”图标,然后单击“OK”。打开“Package”编辑器。<br> (2)“Package”编辑器为新建包建立一个“Contains”节点和一个“Requires”节点。这里“Contains”节点包含新包需要的单元,“Requires”节点包含新包需要的其它包。 <br> (3)要将一个单元添加到“Contains”中,选择“Contains”节点,然后单击“Add ”按钮,打开“Add”对话框。在“Unit file name”编辑框输入单元文件名(后缀为.PAS),或者单击“Browse”按钮进行选择,然后单击“OK”,则选择的单元文件加入到了包的“Contains”节点中。 <br> (4)要将一个包添加到“Requires”中,选择“Requires”节点,然后单击“Add ”按钮,打开“Add”对话框,见图10.6。在“Package name”编辑框输入包文件名(后缀为.DCP),或者单击“Browse”按钮进行选择,然后单击“OK”,则选择的包文件加入到了包的“Requires”节点中。<br> (5)单击“Options”按钮,打开“Options ”对话框。该对话框用于设置有关新包的属性。<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -