Delphi 框架Frames的使用

Delphi中TFrame组件的使用

从Delphi 5.0开始,Borland 引进了一个新的可视化的容器类TFrame。这个类,我们称之为TFrame框架组件,使程序开发人员能够可视化的设置一组组件,之后系统中对它进行重用。

TFrame框架有两个主要的好处:

第一、框架可大幅减少需要存储在工程中的资源量。

第二、框架允许你可视化的创建能复制和扩展的对象。对可视化窗体继承(VFI), 你可以享受同样的好处。

VFI允许你很简单的创建由继承得来的窗体。VFI的限制是你必须用"全部或全无"的方式来使用窗体。更具体的说,当你用VFI时,你总是创建一个新的窗 体。

TFrame框架也可认为与组件模板(含一个或更多组件并用Component | Create Component Template命令保存到组件 面板的一个组)相似。但是,相似之处仅限于它们都是被可视化设计的(不象传统的完全基于代码的组件设计)。实际上,框架与组件模板的差异是巨大的。正如我 们已学过的,框架是一定义类的实例,当定义类发生改变时框架也将发生变化。与之相比,组件模板是组件的集合。对组件模板的改变不影响以前从这一模板创建的 对象。

创建框架

1> 选择 File | New Application 建立一个新的工程。

2> 选择 File | New Frame 建立一个新的TFrame框架。在这一框架上,添加三个Label和三个DBEdit,还有一个 DBNavigator和一个DataSource。将Label的Caption分别设为ID,First Name和Last Name。将 DBEdit和DBNavigator的DataSource属性设为DataSource1。

3> 将框架的Name属性设为NameFrame。(相比其它对象,起一个有意义的名字对框架来说非常重要)最后,选择File | Save As 保存框 架。在这里,用文件名NAMEFRAM.PAS保存框架。

使用框架

1> 在由上面步骤建立的工程中选择Form1。

2> 加两个GroupBox到窗体上,其中一个在另一个之上。设置第一个的Caption为Customers,第二个的Caption为 Employees。

3> 现在添加框架。选择组件面板的Standard页,点击Frame组件并将其拖到名为Customers的GroupBox中。这时Delphi会显示一 个Select frame to insert对话框。

4> 在对话框中选择NameFrame。现在框架将在名为Customers的GroupBox中显示。重复这一步骤,这一次将框架放在名为 Employees的GroupBox中。你可能要调节框架的尺寸,这跟你最初是如何放置有关。

5> 将两个Table组件放到窗体中,将其DatabaseName属性都设为IBLocal。将Table1的TableName属性设为 CUSTOMER,将Table2的TableName属性设为EMPLOYEE。将两个Table的Active属性都设为True,使它们有效。

6> 下面的步骤将把事情变得有趣。选择名为Customers的GroupBox中的DataSource,将其DataSet属性设为Table1。一般的 你不能直接选择组件中的对象,但是框架是个例外。你可以选择框架中的任何对象,操作它们的属性。然后,选择名名为Customers的GroupBox中 DataSource,其DataSet属性设为Table2。

7> 最后,设置好所有的DBEdits。将名为Customers的 GroupBox中的三个DBEdits的DataField属性分别设为CUST_NO,CONTACT_FIRST和CONTACT_LAST。对 Employees中的,设置DataField属性为EMP_NO,FIRST_NAME和LAST_NAME。

8> 保存工程并运行。

框架和继承

1> 在上面建立的工程中,按[Shift][F12]并在窗体列表中选择NameFrame。

2> 将DataSource的AutoEdit属性设为False 。

3> 然后,选择DBNavigator,展开它的VisibleButtons属性,并设置nbInsert,nbDelete,nbEdit,nbPost 和nbCancel标志为False。

4> 现在看一下你的主窗体,注意两个NameFrame的后代都继承了你对框架做的修改。

重载包含组件的属性

框架的优点之一(与VFI一样)是你可以改变框架中对象的属性和事件处理函数。这些修改重载了继承的值。说得具体些,随后对初始框架的重载属性的修改将不 改变后代的重载属性的值。

1> 在名为Customers的GroupBox中,选择标题为"ID"的label,在Object Inspector将其Caption属性改为 "Customer No:"。现在选择名为Customers的GroupBox中的标题为"ID"的Label,其Caption属性改为 "Employee ID:"。

2> 按[Shift][F12]并选择NameFrame。将标题为"ID"的Label的Caption属性改为Identifier。

3> 回到主窗体,注意Label的Caption属性没有变为Identifier。它们仍保持它们的重载值。

4> 这一效果是由保存在DFM文件中的信息实现的。

注意所有其属性改变过的在框架中的对象,都出现在DFM文件中的内置部分。但是,这一部分仅列出那些改变的值,所有其它属性值要么按初始框架的值设置(它 们已经存储在框架的DFM文件中),要么按每一组件的默认类定义值。

就象窗体中的对象的事件处理函数是窗体类的公开方法,框架中的对象的事件处理函数也是框架类的公开方法。(代码段实际上并没有说框架的这些方法是公开的, 而是它们在框架声明的默认可见部分被声明,其可见性默认是公开的。)

框架节省资源

在声明窗体中有两个框架。我们已经讨论了TwoButtonFrame框架。第二个框架显示公司标志,名为LogoFrame。

LogoFrame在FramDemo的多个窗体中出现。一种替代使用框架的做法是在每个窗体中设置一个Image对象来显示公司标志。但是,用框架可以 显著减少需要编译到EXE文件中的资源,生成一个较小的可执行文件。

如果把一个TImage放在窗体中,窗体的DFM文件将必须包含整个公司标志的二进制数表示。而且,每一个含有图象的窗体都重复保存这一资源。但用框架 时,资源只定义一次。

简化框架的使用

在一单个、小的工程中,使用组件面板Standard页上的框架组件是相当简单的。但是对更大的、或是要在多个程序中使用同一个框架的情况下,你需要使操 作更简单。幸运的是,Delphi允许你将单个框架放到组件面板,使这些框架不需要另外的步骤而简单的重复使用。框架也可放到对象库 (Object Repository)中,使它可以简单的拷贝。这两个技术都将在下面叙述。

把框架添加到组件面板

把一个框架添加到组件模板,你可以使放置这一框架变得与其它组件一样简单。与之相比,用组件模板的Standard页中的框架组件需要四步,而且限制你仅 能放置在你的工程中已经定义的框架。将一特定框架添加到组件模板中,需要:

1> 保存框架。如果你要在多个程序中使用一个框架,我非常建议你将框架保存到升级Delphi时不会被删除的目录中。例如,建立一个名为 c:\Program Files\Borland\DelphiFrames的目录来保存你的框架。

2> 选择框架并在上面点鼠标右键,选择Add to Palette,Delphi会显示Component Template Information对话 框。

3> 在Component name栏定义框架组件的名称,在Palette page栏填写你想让框架在组件模板内出现的页。如果你已为框架建立了一个 24 x 24象素、16色的图标,点击Change按钮来选择这个BMP文件。当你完成后,点击OK按钮。

从组件模板使用框架

要使用一个已添加到组件面板的框架,在组件面板中选择你保存框架的页,选择框架图标并在你要框架后代出现的窗体上拖出该框架。这个过程仅需这两步。

将框架添加到对象库

把框架添加到对象库,你可以使拷贝该框架到一个新工程的过程变得简单。尤其重要的是对象库提供放置继承的框架到新的工程的能力,它使框架和它的祖先之间的 关系得以保持。要将框架添加到对象库,需要以下步骤:

1> 保存框架。除了保存框架到Delphi的OBJREPOS目录或是共享目录,你还可以使用你保存添加到组件模板中的框架的目录。如果你使用共享库,将框架 保存到共享目录特别好,它允许多个开发者共享框架。

2> 在框架上面点鼠标右键,选择Add To Repository,Delphi会显示Add To Repository对话框。

3> 就像你添加其它模板到Object Repository一样填写Add To Repository对话框。完成后点击OK按钮。

从对象库中使用框架

按照下面步骤来从对象库中使用框架:

1> 选择 File | New.

2> 选择你在Object Repository保存框架模板的页。

3> 选择代表框架的图标,然后选择Inherit单选按钮。

4> 点击OK按钮,添加框架的继承版本到你的工程

如果你选择Copy单选按钮而不是Inherit单选按钮,添加进的框架将是原框架的一个拷贝。当你需要创建一个新的框架,但又不想保持它与原框架的关系 时是很有用的。

把需要重复使用的框架添加到组件模板与添加到对象库有不同的效果吗?答案是:"Yes!"。在 大多数情况,你要把你频繁使用的框架添加到组件面板中。这样当你放置框架时,你得到的是框架的一个实例。你然后可以容易的修改这一实例 的属性和事件处理函数,就象本文先前介绍的一样。与之相比,从对象库放置一个框架会产生一个新的类,而不是一个实例。这 个类要么是原来的拷贝要么是原来的继承,取决于你在Object Repository对话框中选择了哪一个单选按钮。如果你要在工程中 使用框架,添加一个框架实例比定义一个框架新类有意义的多。如果是这一目的,将框架保存到组件面板是最好的方法。

有一种情况你要使用对象库:当你需要专门创建一框架层次,并且每一个框架后代引进了附加的对象、方法或事件处理函数。这时,对象库提 供的继承性使创建后代变得简单。定义好需要经常使用框架的后代,可以将它们添加到组件面板以简化它们的使用。

时间: 2024-08-01 19:47:22

Delphi 框架Frames的使用的相关文章

【翻译】在GitHub上通过星级评估排名前10的最受欢迎的开源Delphi项目

GitHub上有相当多的Delphi开源项目可以为你节省一些时间.我在GitHub上搜索了Delphi,然后按最主要的项目进行排序,并列出了前十名单.这里有一些非常好的东西,包括Awesome Delphi(这是另一个顶级列表),Delphi IDE颜色主题项目,MVC Web框架,REST API客户端,Delphi开源计算机视觉库标题,一个非常强大的自定义TreeView组件,单元测试框架,将Chrome嵌入到您的应用中的组件,以及最终的OmniThreadLibrary. 查看下面的完整列

Delphi国内优秀网站及开源项目

Delphi编程技巧大全     http://www.delphitop.com/ Delphi盒子 www.2ccc.com 2Pascal-新时代的Pascal http://www.2pascal.com WeDelphi http://www.WeDelphi.com 新大富翁论坛 http://www.dfwlt.com/forum.php 万一的博客:http://www.cnblogs.com/del/ 原Delphi窖洞洞主博客:http://www.cnblogs.com/x

gtk+学习笔记(八)

框架(Frames)可以用于在盒子中封装一个或一组构件,框架本身还可以有一个标签.标签的位置和盒子的风格可以灵活改变. 框架可以用下面的函数创建: GtkWidget *gtk_frame_new( const gchar *label ); 标签缺省放在框架的左上角.传递NULL值作为label参数时,框架不显示标签.标签文本可以用下面的函数改变. void gtk_frame_set_label( GtkFrame    *frame,                          co

js笔记02

1.BOM的概述 browser object modal :浏览器对象模型. 浏览器对象:window对象. Window 对象会在 <body> 或 <frameset> 每次出现时被自动创建. Window 顶级父类--> 子:history location Navigator screen 2. window的属性 innerHeight: 文档显示区的高度,不包括工具栏 菜单栏等高度 innerWidth: IE不支持 不包括滚动条 通用写法:var x =win

jQuery源码分析系列(34) : Ajax - 预处理jsonp

上一章大概讲了前置过滤器和请求分发器的作用,这一章主要是具体分析每种对应的处理方式 $.ajax()调用不同类型的响应,被传递到成功处理函数之前,会经过不同种类的预处理(prefilters). 预处理的类型取决于由更加接近默认的Content-Type响应,但可以明确使用dataType选项进行设置.如果提供了dataType选项, 响应的Content-Type头信息将被忽略. 有效的数据类型是text, html, xml, json,jsonp,和 script. dataType:预期

BOM 请给javascript一个说法-------Day33

楼市低迷,业主是不是该要个说法.黄金暴跌,谁来给大妈们一个说法.中国足球,敢不敢给大家一个说法. 给个说法,谁给,给谁,这该是哲学的范畴了吧. 可是,在这里.BOM是真真切切的给javascript一个说法,这到底是怎么个意思呢,我们慢慢来看. 我们先来回想下完整javascript的结构组成:ECMAjavascript + DOM + BOM. ECMAjavascript我们记得非常清楚.这是核心.变量里存不同类型的值,运算符对照值.运算符改变值.语句描写叙述运算,语句合成函数方法,就好像

js最基础的东西(不用看)9

用JavaScript实现更复杂的交互(李晓华 2001年04月29日 01:50) 一.什么是框架 框架Frames最主要功用是"分割"视窗,使每个"小视窗"能显示不同的HTM L文件,不同框架之间可以互动(interact),这就是说不同框架之间可以交换讯息与资料.例如:假设您开了两个frames,第一个frame可显示书的目录,第二个frame则显示章节的具体内容. 框架可以将屏幕分割成不同的区域,每个区域有自己的URL,通过Frames[]数组对象来实现不同

js最基础的东西(不用看)5

在JavaScript中创建新对象 使用JavaScript可以创建自己的对象.虽然JavaScript内部和浏览器本身的功能已十分强大,但JavaScript还是提供了创建一个新对象的方法.使其不必像超文本标识语言那样,求于或其它多媒体工具,就能完成许多复杂的工作. 在JavaScript中创建一个新的对象是十分简单的.首先它必须定义一个对象,而后再为该对象创建一个实例.这个实例就是一个新对象,它具有对象定义中的基本特征. 一.对象的定义JavaScript对象的定义,其基本格式如下:Func

JavaWeb-03(JavaScript 和BOM)

JavaWeb-03 JavaWeb-JavaScript 和BOM 补充:CSS中Link标签中的rel属性的补充-在IE浏览器中点击查看样式从而调用代码中的CSS文件改变样式 <!doctype html> <html lang="en"> <head> <link rel = "stylesheet" href="http://blog.163.com/faith_yee/blog/a.css"&g