Delphi之对象库(Object Repository)

对象库(Object Repository)是一种手段,通过这种手段,用户可以选择预定义的对象,并运用到自己的应用程序中,用对象库能做以下的工作:

  • 选择一个预定义的应用程序、窗体或对话框,用于用户的应用程序中。
  • 将用户自己的窗体、对话框及应用程序加入到对象库中。
  • 增加其他对象到用户的应用程序,如添加ASCII文本文件和附加的源代码单元。
  • 管理数据模块(data modules)
  • 创建组件(Components)
  • 创建新程序包(packages)
  • 创建新的ActiveX控件或ActiveForms。
  • 调用向导来帮助用户建立一个对话框或应用程序。

以上只是选择性的介绍,出了上面的列出的对象外,还可以创建其他对象。

1、对象库页面和选项(Object Repository Pages and Options )

只要从主菜单选取【File | New】项,对象库就会自动显示出来,如下图给出了不打开工程时出现的对象库窗口:

0213

Note

初看起来可能有点陌生,对象库的标题是“New Items”,对象库配置对话框的标题是“Object Repository”,但是这个“New Items”就是对象库窗口。

对象库有若干的选项页,每个页面包含不同的对象,从上图可以看出,最初选择的是New页面,下面列出了对象库各个页面的简单描述。

对象库页面

  • New——使用户能创建一个新应用程序、窗体或单元用于用户的应用程序。还能创建高级对象,如程序包(packages)、DLLs、组件、NT服务器应用程序、Web服务器应用程序和数据模块。
  • ActiveX——使用户创建新的ActiveX控件、类型库(type libraries)、COM对象、ActiveForms和其他的ActiveX对象。
  • Multitier——使用户能创建CORBA和MTS对象,以及数据模块(仅适用于客户/服务器版)。
  • Forms——使用户能用预建窗体(如About窗口、双列表窗口、带标签页等)创建标准窗体。
  • Dialogs——给出若干种基本的对话框类型供用户选择,还包括了Dialog Wizard。
  • Projects——列出全部可供选择的工程,用户可以从中选取一个来建立应用程序,其中还包含应用程序向导。
  • Data Modules——使用户能选择应用程序中的数据模块。
  • WebServices——使用户能创建SOAP服务器应用程序,数据模块等。
  • Web Documents——使用户创建标准的HTML、XSL、WML、XHTML等网页文本。

Note

如果用户在已打开工程的情况下调用“Object Repository”,会看到一个附加标签页,标签页的名称为当前工程的名称。点击这个标签页会显示一个页面,其中包括了该工程当前的全部对象。用户只需要从Object Repository中简单的选取,就能快速的重新使用窗体或其他对象。如下图:

0214

Note

对象库(Object Repository)有时也被称为Gallery(陈列室)。

在每个页面底部都有三个单选按钮,分别标着Copy、Inherit和Use,它们确定被选择对象的实现方式。根据被选对象,某些单选按钮可能会变灰(失效)。例如,在显示New页面时,三个按钮都变灰。这是因为在New页面上Copy是唯一的可用选项,因此Delphi把全部按钮变灰,并自动使用Copy选项。

(1)Copy按钮

当用户选中Copy按钮时,Delphi创建被选对象的一个拷贝并把它放到用户的应用程序中,这时用户可以自由修改这个拷贝对象,并且在用户修改应用程序中的这个对象时,Repository中的原始对象不会跟着改变。

为了更直观的理解,可以打个比方:有一张表格(比如说是一张工作日程表),想填上日程安排内容,但不能直接在原表上填写(如果在原表中填写,这张表就不能重复用了),而是应该拿原表去复印一份,并把原表保存好以备以后再用。

可以在复印的表格上填写。对象库中对象的拷贝正是这个道理。用户可以自由修改拷贝,原件不会改变。制作拷贝是使用对象的最安全办法。

(2)Inherit按钮

Inherit类似于Copy,但二者的最大区别是:Inherit新建对象还连接着原对象,如果修改库中原对象,新建对象会跟着作相同改变。反过来则不成立。用户可以修改新对象,而原对象不会改变。

为了理解这种类型的对象用法,再次打个比方:信息管理人员经常用电子表格程序创建电子表格数据表,并在字处理程序中使用该电子数据表制作报表。在从剪贴板粘贴或导入电子数据表到字处理程序时,他们通常有选择地链接数据到电子数据表。这样,当修改电子数据表时,字处理文档会跟着变化。

同样地,改变原窗体,所有的继承窗体都跟着改变。当多个窗体由一个公用窗体派生,且这个公用窗体某些地方要做修改时,可用Inherit选项。对原窗体的任何修改都将反映到继承窗体上。

(3)Use按钮

Use选项不是通用的。当用户使用USE一个对象时,也就是直接打开该对象进行编辑。当用户在对象库中存放了一个对象,并且要对该对象做永久性的修改时,选择本选项。在“Inherit按钮”中说过,对原窗体的修改会反映到所有继承窗体上。如果要改变一个原窗体,可以用Use选项打开它。

(4)使用对象库(Using the Object Repository)

当用户从Object Repository中选取一个对象时会发生什么情况?这取决于多个因素。其中包括所选对象的类型,当前是否打开了工程,以及用户选择的使用类型(Copy、Inherit或Use)。

如果用户打开了一个应用程序,同时要从Object Repository中选择创建一个新的应用程序,在显示新工程之前,系统会提示用户保存当前工程。

Tip

从主菜单上选择【File | New | Application】菜单项,是开始一个新应用程序的简捷方法。它等同于从主菜单上选择New菜单项,再从Object Repository中选择Application对象。类似地,主菜单上的New Form项是开始一个新窗体的简捷方法。

在用Object Repository创建新窗体时,打开与不打开工程,创建的方式是不同的。如果打开工程,新窗体作为一个窗体和相应的窗体单元加入到应用程序中;如果不打开工程,则新窗体和窗体单元被创建成独立的窗体。创建一个工程之外的窗体必须加到工程中才能在运行阶段使用。当要创建加入到对象库的新基础窗体时,使用本选项。

如果用户选择创建一个新单元或文本文件,则用Code Editor来创建新文件很简便(若是新单元,将其加入到当前工程即可)。创建一个新文本文件的理由有多种,比如说,用户要在应用程序中加入一个配置文件(INI文件),用户可在Object Repository中创建一个新文本文件来初步创建该配置文件。无论何时创建新单元,用户都要为用户的应用程序启动一个新的源文件,并且该源文件与窗体无关(比如包含文件)。

选择一个新的DLL,会导致创建一个新工程,该工程用作DLL。创建一个新组建或线程对象时,会填出一个对话框,询问有关要创建对象的详细信息。

(5)对象库查看窗(The Object Repository Views)

实际上对象库窗口是一个Win32的列表查看控件(listview control),它类似于Windows资源管理器的右半部分。有多种查看视图供用户选择:Large Icons、Small Icons、List、Details。缺省时查看视图为Large Icons。要改变查看对象库的视图,右键点击Object Repository,并从中选择所要的视图样式即可,如下图所示:

0215

Object Repository快捷菜单中还给出了不同的排列方式,可以按名称、描述、日期或作者进行排列。

2、利用对象库创建新对象(Creating New Objects from the Object Repository)

毫无疑问,对象库的最基本用途是:用库中对象创建新的对象。为了更好地理解,按下述步骤来创建一个简单的应用程序,它有一个主窗体、一个About对话框和一个次窗体。

(1)关闭所有的工程,从主菜单中选取【File | New】,在Object Repository选取Application,新应用程序创建后显示一个空白窗体。

(2)将两个按钮放置到窗体中,将其中一个按钮的Caption属性设置为“About”,另一个按钮的Caption属性设置为“Display Form2”,如果需要,亦可以改动每个按钮的Name属性。如下图:

0216

(3)从主菜单选择【File | New】,再次显示Object Repository,点击Forms标签,选择“About Box”对象,保证Copy单选按钮选中,如下图。点击OK创建一个新的About窗体,很快显示出About窗体,按需要进行修改(例如输入用户自己的信息、改变图标、窗体大小、位置等)。

0217

About窗口如下:

0218

(4)从主菜单选择【File | New】,第三次显示出Object Repository,点击Forms标签,选取“Dual list box”对象,点击OK。Dual list box窗口如下:

0219

(5)按要求编写两个按钮的事件处理程序(一个按钮显示About窗体,另一个显示Dual list box窗体)。别忘记把About窗体和Dual list box窗体的单元加到主窗体的uses中。代码如下:

uses UAboutBox, UDualListDlg;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  AboutBox.ShowModal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DualListDlg.ShowModal;
end;

(6)编译运行并测试程序。

这个程序并没有做任何事情,它向大家说明了如何用Object Repository来快速地开发应用程序原型。

星星上面代码均在Delphi7中测试通过,示例代码下载:利用对象库创建新对象.rar

3、向对象库增加对象(Adding Objects to the Object Repository)

如果不能往Object Repository中增加用户自己的独享,就显示不出Object Repository的效果。可以往Object Repository中加入自己的对象,并且也应该这么做。把常用对象加到Object Repository中可提高工作效率,因而成为更有价值的程序设计员。

当用户创建应用程序、窗体或其他对象后,将它存入对象库,以后需要时可以再用。当然,没有必要把创建的每个窗体都存入对象库,把经常使用的存入对象库即可。

可以在正常开发应用程序的过程中向对象库增加对象,也可以专为向对象库加入对象而创建对象。比如说,在开发应用程序的过程中创建一个About对话框,用户突然觉得要把这个About对话框保存起来以备用到所有程序中,毕竟它包含所有的公司名称、标识和全部的版权信息,没有必要为每个应用程序去重建相同的About对话框。要做到这一点很简单,把它加到对象库中即可。

要将一个窗体加到对象库中,首先保存它。然后用鼠标右键点击窗体的任何部位,从Form Designer快捷菜单选取Add To Repository菜单项,弹出如下的对话框:

0220

Add To Repository对话框左侧Forms列表框列出应用程序中当前窗体和其他对象(如数据模块)。首先,选取要加到Object Repository中的窗体。

Note

Form Designer中的当前窗体已经被选到Add To Repository对话框中的Forms列表框中。

现在输入对象的名称(Title),这个名称会显示在Object Repository中对象图标的下方。在Description编辑框中输入该对象的描述信息。当Object Repository中查看视图为Details时,会显示该信息。Author中输入对象编写的作者。

Note

Delphi对象库中大多数预建对象的作者姓名是“Borland”。

Page编辑框中选择存放对象的Object Repository页面。可以从已存在的页面中选一个,也可以在Page编辑框中输入一个新页面。如果输入的页面名不存在,Delphi将创建一个新页面。对话框下面的Browser按钮,可以为新增对象选一个图标。

填写完所有字段后并选择了图标,点击OK把该对象加到对象库中。从上述过程可以看出,往对象库中增加对象与使用对象一样容易。

Caution

当往对象库中增加一个对象时,Delphi在对象库文件中增加一个条目来描述该对象。其中包括对象的窗体和源文件所在目录的路径名。如果移动或删除一个对象的窗体或源文件的话,就不能再从对象库中使用该对象。

4、向对象库增加工程(Adding Projects to the Object Repository)

向对象库增加工程与向对象库中增加单个窗体没有太大的差别。要向对象库增加工程,从主菜单选择【Project | Add To Repository】菜单项,弹出Add ToRepository对话框(该对话框与向对象库增加对象时的对话框相似,只是没有了Forms列表框);输入要求的信息(名称、描述、作者等等),点击OK就可将工程加入到对象库中。如下图:

0221

在熟悉了Delphi之后,应该创建这样一个应用程序外壳,它包含了应用程序最常用的特性。每次开始创建标准应用程序时,从对象库中拷贝一份该应用程序外壳。可以把菜单、工具栏、About对话框及其他标准对话框都事先在应用程序外壳中创建好,以后使用起来就很方便。应用程序创建完后,可进行修改,如增加窗体,删除不想要的窗体等等。

5、对象库的内务处理(Object Repository Housekeeping)

对象库中页面和对象的管理是通过使用对象库配置对话框来进行的。

要产看对象库配置对话框,可从主菜单选择【Tools | Repository】菜单项,或者从对象库的快捷菜单选“Properties”菜单项打开,如下图:

0222

通过这个对话框,可删除对象库中的对象和页面,把对象从一个页面移到另一个页面,改变对象库中页面的顺序等等。对话框左侧标有Pages列表框列出了对象库中的页面;对话框右侧的Objects列表框列出了当前页面所包含的对象。

Note

Pages列表框有两条特别要注意,首先,New页面(当调用对象库时它总是显示在头一个位置)不在列表框中(ActiveX和Multitier页面也不在Pages列表框中)。New页面是固定的,不能作任何改动。还要注意Pages列表框中有一个[Object  Repository]项,此项实际是对象库中所有页面上的所有项目的列表。

(1)对象管理(Managing Objects)

必须先选取对象,才能标记、删除或移动对象。选取对象时,单击Objects列表框中的对象。选取对象后,单击“Edit Object…”按钮来编辑对象。编辑对象时,可以改变对象的名称、描述、作者信息及对象所在页面。如下图弹出“Edit Object Info”对话框。

0223

Tip

要快速编辑一个对象,可双击Objects列表框中的对象。

可通过选取对象并单击“Delete Object”按钮来删除对象。在对象删除之前,系统会提示“是否要删除对象”,得到确认后才真正删除。如下图:

0224

Note

从对象库中删除对象,是将对象从Object Repository文件中删除,不再出现在对象库的任何页面上。但是,对象的窗体文件和源文件并未从磁盘中删除。

要将对象从给一个页面移到另一个页面,只需用鼠标把对象从对象列表框拖动到页面列表框中某个页面位置处放下。

(2)页面管理(Managing Pages)

通过对象库配置对话框,也可以增加、删除或移动对象库页面。删除一个页面先要将该页面上的所有对象删除,然后点击页面列表框中该页面名并点击“Delete Page”按钮,Delphi先检查该页面是不是空页面,若是空页面,Delphi将从对象库中删除。

0225

点击“Add Page”按钮可向对象库增加新页面。此时会弹出一个对话框,要求输入新页面名称;输入页面名后点击OK,新增页面就会出现在页面列表框中。如下图:

0226

页面更名与此相似。选取一个页面,点击“Rename Page”按钮,弹出一个对话框提示输入新的页面名。如下图:

0227

页面在对象库内的顺序是可以改变的,要改变一个页面的次序,点击该页面名使其变亮,然后点击页面列表框下方的上箭头或下箭头按钮,将页面往上移或往下移。也可以用鼠标将页面拖到新位置。

(3)设置缺省窗体和工程(Setting Default Forms and Projects)

通过对象库配置对话框,可以设置下列三个缺省对象:

  • 从主菜单选择【File | New | Form】菜单项时使用的缺省窗体
  • 从主菜单选择【File | New | Application】菜单项时用作主窗体的缺省窗体。
  • 从主菜单选择【File | New | Application】菜单项时使用的缺省工程。

对象列表框下方根据所选对象出现不同的复选框。如果选择窗体,则出现New Form和Main Form复选框;如果选择工程,则出现New Project复选框,如下图:

0228 0229

把一个窗体或工程设置为缺省很简单。例如,要把一个主窗体设置为新建应用程序的缺省主窗体,可以从对象列表框中选取该窗体,选中“Main Form”复选框,点击OK。从此以后,这个主窗体就成为了缺省主窗体。类似地,要把一个工程设置为缺省工程,先在对象库配置对话框中找到该工程,点击它,然后选中“New Project”复选框,点击OK即可。从此以后,只要从主菜单选择【File | New | Application】,设置为缺省的工程就会显示出来。

Note

如果不小心将一个窗体设置成了新建应用程序的缺省窗体,可检查对象库配置对话框中每一个窗体,其中必有一个窗体使“Main Form”复选框处于选中状态,此时将其变为不选状态,一切都会恢复正常。这些也适用于缺省工程。检查Projects页面,查出使得“New Project”复选框选中的工程。

posted on 2012-01-29 22:53  pchmonster  阅读(4036)  评论(1编辑  收藏  举报

导航