Delphi 6 新特性-VCL单元变化及特性(中文)

类别:Delphi 点击:0 评论:0 推荐:

 

 

Delphi 6 新特性

原著:Borland Corporation

翻译:Musicwind®

开始日期:2001-07-13

结束日期:2001-07-14 (完成VCL单元变化及特性

 

 

声明:

以下文章的内容取自Delphi 6附带的帮助文件。

版权所有Borland Corporation

翻译此稿事先没有得到Borland的批准,鲁莽之处,恳请Borland多多原谅。

 

 

有什么新鲜的?

Delphi 6新增了一些特性并增强了原有的功能,主要有以下几个方面:

IDE(整合开发环境)

       Internet

       XML(扩展标记语言)

       Compiler(编译器)

       COM/Active X

       Database support(数据库支持)

       CORBA

       Actions(动作)

       Custom Variants(可定义的可变类型)

       VCL 单元和特性

       RTL单元和特性

       Cross-platform development(跨平台开发)

       Translation tools(翻译工具)

       Deployment changes(发布机制)

Help system extensibility(扩展的帮助系统)

 

注意:某些特性不是所有Delphi版本都有。

 

 

VCL单元及特性

 

新的VCL单元以及新的特性(所有版本)

新增组件:

TLabeledEdit

 

TLabeledEdit是ExtCtrls.pas单元中新增加的,它演示了如何使用子组件。TLabeledEdit是一个带有标签的编辑控件。标签(Label)是这个控件的属性之一。

 

TValueListEditor

 

ValueListEditor 是一个自定义的栅格组件,它使用TStrings保存键/值配对。它的工作方式类似于对象检视器(Object Inspector)。

 

TComboBoxEx

 

TComboBoxEx是一个新的组合框控件,它允许在列表文字的旁边出现图片。

 

TColorBox

 

TcolorBox是一个新的组合框组件,用来选择各种颜色。

 

改进的特性包括:

 

大多数窗口控件(WindowControl)都发布了以下Bevel相关属性:

 

BevelEdges

       BevelInner

       BevelOuter

       BevelKind

       BevelWidth

 

子组件(Subcomponents)

 

现在,组件可以拥有创建子组件的其他组件。举例来说,一个组件可以有一个组件引用的属性,这个被引用的组件,可以是内部的(也就是一个子组件),也可以是外部的(普通的组件引用)。如果引用的是内部的组件,则这个子组件的不被Form所拥有,而是被放置在Form上的组件所拥有。这意味着组件可以将其内部的子组件发布出来,并且能够被正确的流化。并且,对象检视器已经被修改为支持查看组件内部的子组件属性(比如Font属性)。要创建一个有子组件的组件,需要调用TComponent.SetSubComponent方法。

 

 

可发布的接口属性(Publishable interface properties)

 

接口属性(该属性的类型是一个接口)现在已经可以被发布,当且仅当这个接口的实现的类是一个可以流化的组件。

 

这意味着现在你可以在对象检视器中看到接口类型的属性,并且将会出现一个支持此接口的组件列表以供选择。

 

新增单元及变动

 

CheckLst.pas

TcheckListBox增加了几个新的属性,包括AutoComplete,HeaderColor以及HeaderBackGroundColor。

 

Classes.pas

 

TList有一个新的Assign方法,不仅完成拷贝功能,也支持一些简单的集合操作。

 

TCollection新增两个受保护的方法,用来允许派生的类对于增加和删除条目的操作作进一步的处理。这两个新方法是Added和Deleting,两者都没有缺省的实现。为了保持TCollection的精简,没有增加OnAdded和OnDeleting事件。然而,在派生类中却很容易实现这些。此外,TCollection新增一个Owner属性以便对拥有者进行标识。

 

TStringList新增属性CaseSensitive(大小写敏感),允许你控制子串列表的各项操作(排序,匹配)是否大小写敏感。

 

 

TDataModule从Forms单元移到现在这个单元中(Classes.Pas),去处了对可视化控件的依赖。这使得你可以在不包含用户界面的情况下写出更小的服务段应用。

 

Thread新增FatalException属性,以标识任何导致线程正常运行的异常。

 

TStream重载了Seek(搜索)函数,允许Int64类型的值来标识位置。派生的类可以覆盖其中一个重载,但不能覆盖所有。

 

 

TinterfacedPersistent是一个新的持久对象的基类,不是组件,但是可以实现接口。

 

ComCtrls.pas

TtreeView的CreateTreeNodes方法是新增加的。

 

简单的节点的创建,并且增加了一个事件,使得Tree的使用这不必为了要覆盖节点的类而去重新创建一个派生类。并且AddNode也作了修改,让你可以将你想要加入的节点(任何类型)传递给它。

 

       增加一个OnAddition事件,该事件在节点被增加时触发。

       TreeView的排序Api作了增强(功能上)和简化(使用上)。现在你可以对子树进行递归排序,对顶层节点进行非递归的排序。TCustomTreeView和TTreeNode类现在对AlphaSort和CustomSort提供了一致的定义,并且这些方法同时被增加到TTreeNodes中。所有的改动都是后台的,与前一版本保持兼容。

 

增加MultiSelect(多选)相关四个属性以及八个方法。

 

TListView新增了CreateListItems方法,该方法与TTreeView的CreateTreeNodes类似。

 

TStatusBar-可调整大小的夹子现在可以显示,即使状态栏的父亲不直接是Form。只要状态条的右下角处于Form的右下角位置,则该夹子显示。

 

 

TDateTimePicker新增Format属性,用于控制日期值的显示方式。

 

THeaderControl新增许多新的属性和事件以支持列的拖放。一个新属性HotTrack允许当用户的鼠标在顶部区域上停留时,该区域以高亮显示。

 

TToolBar新增Menu属性,可以自动在工具条上添加与Menu的菜单项对应的许多按钮。当用户使用定制对话框来定制工具条时,会有一系列的事件触发。

 

Contnrs.pas

Last(最后)和First(最先)两个函数(属性)被增加到TObjectList,TComponentList以及TClassList中。这些函数的返回值依类的不同而不同。

 

TStack(栈),TQueue(队列),TObjectStack(对象栈)以及TObjectQueue(对象队列)的Push现在改为一个函数,简单的返回被推入到栈(或者队列)中的对象。就像推入,然后查看一样。当要推入在推入时刚创建的对象时,这一点非常有用(译者注:其实这一点,Borland应该早就考虑到才是!)。

 

TBucketList和TObjectBucketList是简单的哈希表。

 

Controls.pas

TCustomListControl是一个新的公用基类,用于表达一组条目的列表控件(比如组合框,列表框和列表视图等)。它引入了一些新的方法用于操纵将要被子孙类继承的列表。

 

TDragObjectEx,TDragControlObjectEx以及TDragDockObjectEx是三个新的拖拽对象,拖拽操作结束后,它们可以自动释放。他们对应于TDragObject,TDragControlObject和TDragDockObject,区别在于老的版本不能够在拖放操作完成时自动释放。

 

TControl新增两个方法:ClientToParent和ParentToClient,用来在父亲与子女之间换算坐标。工作方式与ClientToScreen和ScreenToClient类似。

 

TWinControl新增一个重载的方法PaintTo,参数改为Canvas(画布)而非HDC(设备描述表句柄)。

 

TModalResult被移至Forms.pas中。此外,增加以下几个支持函数:

function IsPositiveResult(const AModalResult: TModalResult): Boolean;

       function IsNegativeResult(const AModalResult: TModalResult): Boolean;

       function IsAbortResult(const AModalResult: TModalResult): Boolean;

       function IsAnAllResult(const AModalResult: TModalResult): Boolean;

       function StripAllFromResult(const AModalResult: TModalResult): TModalResult;

 

DbCtrls.pas

TDBLookupListBox和TDBLookupComboBox新增NullValueKey属性,允许用户使用空值(Null)赋值。

 

TDBComboBox新增AutoComplete(自动完成)和AutoDropDown(自动下拉)属性。

 

TDBListBox也新增AutoCompelete属性。

 

TOpenDialog新增OptionsEx属性(译者注:该属性用来设置是否出现win2000特有的位置工具条),同样,保存对话框也新增此属性。

ExtCtrls.pas

TImage-Proportional(比例)属性被增加,用于控制图像的高宽比而不论图像控件的尺寸如何。

Forms.pas

TApplication(以及TApplicationEvents)新增OnSettingChange事件,用来通知系统设置的改变。

 

TForm新增AlphaBlend,AlphaBlendValue,TransparentColor以及TransparentColorValue等属性以支持分层的Form。

 

TScreen提供了获取桌面工作区大小的一系列属性(WorkAreaRect,WorkAreaTop,WorkAreaLeft,WorkAreaHeight,WorkAreaWidth)。另外,还有一系列的新方法允许你定位哪个监视器更加与点,矩形,或者窗口相匹配。

 

TMonitor扩展了多监视器的支持,提供了当前的主监视器,WorkareaRect以及BoundsRect等属性。

 

新增AutoDragDocking(自动停靠)支持。这一特性允许你关闭应用程序的自动停靠功能。另外,在Delphi的选项设置对话框中允许你修改这么一个标志。

 

TModalResult声明被移到Control.pas单元中。

Graphics.pas

新增TFontRecall, TPenRecall 和 TBrushRecall三个新类,允许你快速存取font(字体),pen(画笔)和brush(刷子)。他们均从TRecall(在Classes单元中声明)派生而来,TRecall需要与TPersistent一起使用。

 

系统颜色经过排序便于查找。

 

在原先16种颜色的基础上新增4个:

 

clMoneyGreen

       clSkyBlue

       clCream

       clMedGray

 

ImgList.pas

Draw,DrawOverlay和GetIcon方法均被加上Overload(重载)标记,便于你覆盖图像列表的属性设置。

 

IniFiles.pas

Ini文件开始支持使用流读写二进制数据。

 

TMemIniFile支持控制子串是否大小写敏感。

 

THashedStringList是一个新的TStrings的派生类,使用内部的哈希(杂凑)表提高访问速度。

Masks.pas

EditMask(掩码编辑框)和文本使用自定义类型因此他们的属性编辑器更加有用。

Menus.pas

TMenuItem增加一个AutoCheck(自动标记)属性,用来标记当用户点及菜单条目时,是否自动在已经标记和未标记之间切换。

Registry.pas

TRegistry开始支持使用流读写二进制数据。

StdCtrls.pas

OnCloseUp和OnSelect事件被增加到TCustomComboBox中(TComboBox也一样)。OnCloseUp事件在组何况的下拉列表关闭时触发(与OnDropDown触发的时机相反)。OnSelect在列表的东西被选中时触发(或者当上下滚动可选值时使得组合框的内容被改变时)。组合框新增AutoCompelete属性,缺省为True。

 

TListBox新增对两个风格的属性:lbVirtual和lbVirtualOwnerDraw。两个风格用于支持虚的列表框,即不保存任何条目。通过设置Count属性可以指定条目的个数,然后在OnData,OnDataFind,和OnDataObject事件中提供条目(以及相关的对象)。

 

TypInfo.pas

现在调用对象的GetPropInfo方法是安全的了。假如对象没有任何RTTI信息,则简单的返回nil。

 

增加FreeAndNilProperties。它将释放(free)并且置空(nil)支持RTTI的对象的所有对象属性。注意它将对所有的对象,包括引用的对象进行此项操作,所以最好先将被引用的对象释放,置空。

 

本文地址:http://com.8s8s.com/it/it5939.htm