• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi各版本的特性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

delphi 各新版本特性收集

 

Delphi XE6新增了一些特性并增强了原有的功能,主要有以下几个方面:
 
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的对象的所有对象属性。注意它将对所有的对象,包括引用的对象进行此项操作,所以最好先将被引用的对象释放,置空。
 

Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的、多设备应用开发解决方案的最新版本。使用Delphi XE5的新特性,以交付应用Android、 iOS、Windows 和OS X。以PC机、平板电脑和智能手机为目标,更轻松地与更多数据连接 - 等等!

Delphi XE5中的新特性

  1. 针对设备和仿真器的 Delphi Android ARM编译器
  2. FM 平台用于创建针对Gingerbread (2.3.3 – 2.3.7)、Ice Cream Sandwich (4.0.3, 4.0.4)和Jelly Bean (4.1.x, 4.2.x, 4.3.x)*的原生Android 应用。
  3. iOS 7 SDK 支持和样式
  4. 针对Android、iOS、Windows和OS X 的时间选择器控件
  5. 针对Android、iOS和OS X 的通知中心组件
  6. Android、iOS、Windows和OS X 上内置搜索过滤可用于 TListView
  7. 在Android和iOS 上滑动屏幕就可以删除
  8. 在Android和iOS上共享工作表支持
  9. FM 平台性能优化
  10. 针对Android 的Delphi RTL
  11. 针对Android 的部署管理器
  12. 部署应用到针对Ice Cream Sandwich 和Jelly Bean 的仿真器
  13. 部署应用到Android 设备(调试 / 应用商店)
  14. 针对Android 的远程调试
  15. 专业版包括对本地数据库的扩展 FireDAC支持,包括Microsoft Access数据库、SQLite数据库、InterBase ToGo / IBLite、本机上的InterBase、 MySQL Embedded、本机上的MySQL Server、Advantage Database本地引擎、本机上的PostgreSQL、Firebird Embedded、以及本机上的Firebird
  16. IBLite 嵌入式数据库可用于Android 和iOS,带有自由不受限的部署许可证
  17. REST 客户端函数库用于简化 REST 服务的调用
  18. 授权支持,包括基本的身份认证、计划身份认证、OAuth1、OAuth2
  19. TRestClient、TRestRequest、和TRestResponse 组件
  20. REST 调试器工具用于测试 REST 调用及其参数
  21. 部署管理器中的多重选择
  22. IDE 内视现在可作为 IDE右上角中一个搜索框使用
  23. 设备管理器可以管理并选择 FM 移动窗体设计器中的缺省设备

… 等等!
* 已支持 Android 设备的列表

Delphi XE4

  • Develop iOS应用 with Delphi iOS ARM编译器、工具链、全新的可视化开发环境和针对 iOS的控件
  • IBLite数据库可用于iOS,并带有不受限的部署许可证
  • FireDAC 可单独使用,大部分特性仅在企业版及以上有效
  • FireMonkey传感器对位置、方向和运动的支持
  • FireMonkey框架和全新的 TListView 组件
  • OS X全屏模式

Delphi XE3

  • Windows 8支持
  • 通过Metropolis UI,将Windows现代化的外观融入到您的应用中
  • OS X Mountain Lion和 Retina 显示支持
  • 可视化的 LiveBindings
  • 增强的FireMonkey 样式、音频/视频和 3D

Delphi XE2

  • 针对Windows 的64位 Delphi编译器
  • FireMonkey应用平台 - 利用一个代码库创建多平台、多设备的应用
  • 用FireMonkey创建Windows 和Mac OS X 桌面应用
  • DataSnap移动连接器
  • LiveBindings (非可视化的)
  • FastReport报表工具

Delphi XE

  • 用DataSnap进行扩展的多层开发
  • 额外的附带工具 (CodeSite Express、IP*Works、Beyond Compare Differ)
  • 针对Azure和Amazon 的云计算支持
  • IDE中的Subversion集成
  • 正则表达式
 

RAD Studio 2010

【CSDN8月20日消息】根据国外媒体报道,Embarcadero Technologies公司宣布推出RAD Studio 2010。开发者可以利用它提供的便捷的触摸屏开发框架来创建基于触摸GUI界面的程序,包括平板电脑、触摸板和kiosk程序。

该版本提供了如下的新特性和功能:

创建手势识别和触摸控制的程序。

内置了超过30种的手势设定,包括上、下、左、右以及像平移、缩放和旋转。

可以通过VCL Gesture Designer在组件级对手势进行可视化设定和添加。

可以在输入屏幕上建立虚拟触摸板和多语言键盘。

可以在只对代码进行很小的情况下就能将Delphi和C++ Builder程序升级为支持触摸和手势识别功能。

RAD Studio 2010对于触摸程序开发的支持独具特色,因为它可以和多种版本的Windows无缝接合,包括Windows 2000、XP、Vista和Windows 7,而且支持多种输入设备,包括单点和多点触屏幕、触摸笔和鼠标。

触摸操作现在已经变成了现实,而且可以向用户提供更丰富的交互体验。从kiosks和POS机到iPhone和 Windows 7,手势识别功能已经成为使程序更具竞争力的关键特性,因为消费者和商家都认识到了自然输入的便利性。,Embarcadaro公司的Michael Swindell说,随着Delphi和C++ Builder 2010的发布,Embarcadero也将提供一套简单的解决方案,可以向多种Windows平台的程序中加入触摸和手势识别功能。

RAD Studio 2010的其他特性还包括:

支持Firebird。Delphi对其提供了本地支持。Embaracaro声称Firebird是全球应用最广的开源数据库。

新的DataSnap。DataSnap服务器已经扩展到了几乎所有的架构RIA、JEE、RESTful、AIR等等。

支持Windows 7。RAD Studio预计对Windows 7的API提供支持,开发者可以利用其Natural Input库Direct2D图形库。

对IDE环境进行了超过120项改进,提升了开发者的使用体验,提高了工作效率。

小资料:Kiosks,Kiosk ModeKiosk Software广泛用于公共电脑或者嵌入系统(如可以上网的公共电话、ATM、机场自助服务系统、网吧管理软件等),这些程序一般都运行于普通的操作系 统,但为了安全以及防止使用者使用其他的程序,Kiosk一般都会全屏运行并锁住系统的其他程序。虽然IE的Kiosk模式没有锁住其他程序,你仍可以用 Alt+Tab来切换,但通常运行Kiosk程序的地方都不会提供键盘给你,最多只是一个仅供最低需求的虚拟键盘而已。(译/曹巳甲)

Delphi2010新发现-类的构造和析构函数功能

Delphi2010发布了.

虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究.

今天有点时间试了一下新功能.

本来C#和Delphi.NET是支持类的构造函数/析构函数的(注意不是实例的构造和析构).也就是在模块初始化/卸载的时候会调用.

这样有很多好处,比如说类的静态变量的初始化什么的都可以在这里做.

Delphi For Win32对这方面的需求还不是很大.

第一个原因.历史上旧版Delphi不支持静态变量.只能用Unit的全局变量+类函数来模拟.所以类的构造析构基本没需求.从Delphhi2005还是2006开始才支持Class var的.记得不太清楚了

第二个原因.Delphi的Unit有初始化节和反初始化节(initialization/finalization).很多初始化工作都可以在这里面做.比如说类的静态变量.所以对类的构造函数需求不是很大.

随手试了一下Delphi2010.惊喜的发现不知道什么时候Delphi2010已经开始支持类的构造和析构函数了.易博龙和CodeGear居然在介绍Delphi2010的新变化的同时都没有介绍这个特征.

贴一段代码:

type
  TTest = class
  private
    class var StaticABC : Integer;  //类变量(类似C++的静态变量.但不完全等同)
    var
    FABC : Integer; //普通成员变量
  public
    class constructor Create();//类的构造函数
    class destructor Destroy; //类的析构函数

    constructor Create();   //实例的构造函数
    destructor Destroy; override; //实例的析构函数
  end;

{ TTest }

class constructor TTest.Create;
begin
  StaticABC := 1234;
end;

class destructor TTest.Destroy;
begin

end;

constructor TTest.Create;
begin
  FABC := StaticABC;
end;

destructor TTest.Destroy;
begin
  inherited Destroy;
end;

呵呵.很有意思.虽然以前用Unit的initialization/finalization可以实现.但是如果有了类的构造和析构语法的话代码的可读性会更好.

同时还发现结构体(Record)也可以用一样的语法.可编译通过,但是实际上却没有效果.估计以后会加上这个功能吧

 

转载的delphi2010新功能

1、Object Inspector 中的 Boolean 属性显示了 Checkbox

这个改进比较明显,看下图就明白了,直接点击 Checkbox 即可改变 Boolean 的值;

2、可以用 Tab 键和 Shift+Tab 缩进代码了

这个没法用图来说明,只能自己体会了,个人觉得,Delphi 1.0 就应该这么做

3、可维护最近打开的 Projects 和 Files 列表

在菜单 File-Reopen-Propeties 中,可设置最近打开 Projects 和 Files 的显示数量,并可删除、清空,如下图:

4、代码编辑器的搜索功能增强

看下图,效果和 Firefox 的搜索功能几乎一致,搜索框移到了下方,同时高亮搜索词:

5、代码自动完成增强:Auto Invoke

刚才说“里程碑”,主要是指这个功能。

当前的 Delphi 编辑器只有在输入“.”的时候,才会出现自动完成列表。在 Delphi 2010 中启用 Auto Invoke 功能后,当你输入任意一个字符的时候,都会出现匹配的自动完成列表,和 Visual Studio 差不多。

Auto Invoke 默认是禁用的,在 Tools - Options 中启用:

下图是输入 Show 后出现的自动完成列表,当然,当你输入第一个字母 S 的时候,自动完成列表已经开始匹配显示了:

在 Visual Studio 中,当输入完赋值运算符后,可自动判断类型并显示枚举类型的值列表,当前的 Delphi 2010 还做不到这一点,不过当输入字符后,也是会按类型匹配的。看下图,会显示 Align 属性的可选值:

当前的 Auto Invoke 用的时候真的是很爽,不过有的时候还是有些问题,会不合时宜地出现,而且自动完成列表有时会匹配错误,编程时有被“干扰”的感觉,期望以后的版本能将其改进得更为“智能”。

6.格式化代码,Edit-source或ctrl+D,但格式效果不大好,可以设置一下

 

7.安装包标识

第一个图标表示已安装

第二个表示未安装

第三个表示非设计时包

 

8.拖动调试,这个比较有意思,断点还可以回退。看下面的效果

第一次运行的时候,x的值=150

按住33行的向右箭头不放,拖到32行放开,效果如下图

再F8走一步,x的值就变成200了

 

 

 

 

更多的Delphi2010新特性,可以参考Delphi 2010 Handbook,非常值得看看。

目前还只有英文版的。

http://m8spy.persiangig.com/.ZqB2Ja51KF/Ebooks/Delphi%202010%20Handbook.pdf

此书配套源码

http://cc.embarcadero.com/Download.aspx?id=27601

 

 

 

Delphi® 2009 新特性

  • 增强的DataSnap组件
    DataSnap是一组数据库组件。在Delphi 2009中对其进行了重构。通过DataSnap在客户端中可以如同调用本地函数般的调用远程函数。
  • 基础语言特性的增强,增加泛型和匿名函数的支持
  • VCL组件的增强,增加了Ribbin Controls(类似office 2008的界面控件)组件,PNG的支持,对现有组件的改进,继续增强对Vista的支持。
  • 增加国际化支持。提供了完整的Unicode支持,从IDE到RTL、VCL等整个构架体系已完全迁移到Unicode。同时提供一组本地化工具,方便将程序翻译为各种语言。
  • IDE增强,比如提供了新的Class Browser(类浏览器),强壮的构建配置,以及对资源管理器(resource management )的增强。
  • COM和ActiveX开发便得更为友善。
    Delphi 2009完全重构了对COM和ActiveX的支持。现在,COM和ActiveX的开发对开发者而言,已经变得完全透明,拥有完整代码的解决方案(译者注:这部分我没看太懂:(,反正就是说更好用了)。
  • 使用VCL组件实现AJAX的开发,想构建普通应用程序一样构建WEB 2.0程序

读帮助文档发现Delphi2009的新特性,C语言一样用数组方式使用指针.

传统的Pascal指针和数组不是等价概念.不能像数组一样使用下标指针(编译器特殊处理的PChar类型除外).

而C语言中数组就是数组第一个元素的地址.和指针在一定程度上等价.指针所指向的内容也可以象数组一样用下标来访问.

虽然问题不大但是写起代码来就麻烦,而且不直观.

如下代码以往的Delphi只能这样写.

const
  rw = 10;
  rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
  I : Integer;
begin
  for I := 0 to dwCount - 1 do
  begin
    lpRect^ := Rect(I*rw, 0, I*rw+rw, rh);
    Inc(lpRect);
  end;
end;

或者非要用下标访问的话就要变通一下.

const
  rw = 10;
  rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
type
  TRects = array[0..0]of TRect;
  pRects = ^TRects;
var
  I : Integer;
  lpRects : pRects;
begin
  lpRects := pRects(lpRect);
  for I := 0 to dwCount - 1 do
  begin
    lpRects[I] := Rect(I*rw, 0, I*rw+rw, rh);
  end;
end;

但是Delphi2009新增了编译开关,允许象C语言一样用下标直接访问数组所指向的元素.

{$POINTERMATH ON}
const
  rw = 10;
  rh = 10;
procedure SetRects(lpRect: PRect; dwCount : Cardinal);
var
  I : Integer;
begin
  for I := 0 to dwCount - 1 do
  begin
    lpRect[I] := Rect(I*rw, 0, I*rw+rw, rh);
  end;
end;

呵呵方便多了.

不过要注意默认是{$POINTERMATH  OFF}的.

目前多数Delphi2009新特性的介绍

2008年09月16日 星期二 10:43

集中在Unicode,以及一些新的URL上,我试图从一些不同的角度察看一下Delphi2009都有些什么东西.

IDE:粗看起来Delphi2009的IDE较之Delphi2007并没有什么特别的增强。主要的UI元素也没有大的变化。最显著的变化就是Project Manager和Tool Palette。
Class Explorer只是针对本工程的,并不会随着Editor中文件的变化而变化,新增的VCL其实无关痛痒,所以但从IDE来看难免会失望。

RTL: 用Merge工具比较Delphi2009 RTL和Delphi2007 RTL源码的时候会发现其实内部的增强变化还是很多的:)。更加多的更合理的inline procedure,不知是学习了Java还是C#,TObject也新增的UnitName,HashCode,以及ToString等方法属性。其中 的UnitName方法应该还是比较有用的,使得目前的unit进化成兼具namespace和类似Java package的单元。

同 时可以看到新增的两个Generics单元,Generics.Collections和Generics.Default已经开始使用新型的 namespace的命名模式。Delphi中“万能”的TList类相对于Delphi2007也进行了大量的修改优化以及增订。

个 人觉得比较有遗憾的是Generices.Collections中的TList并真正的没有替换掉Classes中的TList,其实从行为上 Classes.TList应该只是Generics.Collections.TList有很大的重复。Classes.TList中存放指针其实完全 可以由Generics.Collections.TList<Pointer>或者 Generics.Collections.TList<Integer>替代。

另外在使用过程中我注意到Editor中的ErrorInsight问题还是很多,如TDictionary中的GetItem()方法就不会被Editor正确的识别。可能CodeGear的人手确实还不是很足。

不管怎么说Unicode是Delphi欠了太多年的东西了,而Generics虽然来得晚了些,毕竟终于是来了。直接进行算术运算的指针功能提供了object pascal能够进行更好的低阶编成的能力。

首先我们看到了Tubron的增强,客观的讲,内部的改进确实还是挺大的,尤其是在CodeGear人手并不是很整齐的情况下,之前觉得遗憾的地方的意思就是说Delphi在外围的变化并没有跟上其内部的改进速度。
可 以说Compiler走在了其改进的前面,也就是说CodeGear本身也并没有在Delphi本身上发挥Tubron Complie的全部威力,最明显的就是Generics。在Tubron的RTL中使用新特性最多的除了Unicode就是 reference to procedure;.

下面再看下Delphi2009在语言方面的增强
Language: 
1) reference to procedure / function 这个新特性严格说来算是个语法糖,核心层面仍旧是函数指针地址,这也是在Tubron中并没有实现Multi reference的原因,不过,按照这个方向,我们应该会在后面版本中多播引用的实现。总之,这是个好特性,向流行的Closure迈了一大步 :)
2) 新的Generics语法,如:var dictionary: TDictionary<String, Integer>
Generics对于现代开发太重要了,毕竟所有的地方我们都离不开容器,而缺乏Generics的容器就如同电视缺了遥控的一样。编译器的支持是最重要的,我们有理由相信Tuburon发布后的Delphi社区的力量有能力实做出媲美stl的Generics库。

3)for in loop,Tubron从很多方面增强了for in loop,在Delphi2005引入for in到之前的Delphi的Delphi版本。for in 的支持其实都是有限的,这次Turon中的for in 的支持是更加宽泛的,开发者对for in loop的实现也变得更加容易,在System单元中引入了IEnumerator,IEnumerable,这表明如果我们看到Delphi类库中实现 了IEnumerable的都可以使用for in loop. 

p.s.System中还多了IEquatable,IComparable等接口,这方面看来也是学习了Java中的一些设计理念,很不错 :)

Thread:
Delphi2009 在线程方面的也进行了不小的改进。在System单元中多出了一个TMonitor类。SyncObjs单元中增加了TSemaphore,这个以前 allen bauer在blog提到过的,本来计划在下一版的Delphi才放出,不过看来这次放在Tubron中发布了:)
TThread中增加了获取当前线程对象的静态类方法,同时增加了TThreadProcedure这个reference to procedure,这使得我们在开发多线程应用的时候更加的便利

刚才上面有朋友说起VCL库,其实我们还是不要轻易说 什么是“最好”,当然可以是最喜欢的,如果我们对比下JAVA,VCL的进步真的是太慢了,这很大程度上都是之前Borland公司自己的原因,这次对比 RTL中我发现codegear仍旧为今后在linux上的发展留出了空间,不少条件编译指令都作了对应调整,我们有理由等待未来的Delphi for Linux,希望不要再出什么单独的kylix版本了。
我们不妨YY下将来的Delphi:
1)Delphi for Win32
2)Delphi for .NET
3)Delphi for Linux
4)Delphi for Mac
5)Delphi for Mobile

至少想上去还是不错的 不是么 :)

我个人认为Delphi2007是自Delphi7以来第一个可用版本,而Delphi2009将是自Delphi7以来真正有实质进步的版本,的确值得期待。

这 是个多核的时代,我的T61FC9就是双核,毫无疑问,多核为我们开发人员带来了新的挑战,流行的说法就是挑战与机遇并存。Java在线程方面有天然的优 势,它自诞生以来就是冲着多线程来的,即将到来的Java7还会为我们带来一套并行计算体系,记得叫Fork/Join Framework。还好Tiburon在这方面并没有停步不前,上面的回帖已经提到了线程类增加了获取当前线程的类方法,我个人感觉这点直接就是学自 Java。(也许是.NET,我不懂.NET,所以不好说),更好的证据就是那个新增的TMonitor,千万不要小看这个TMonitor,可以预见, 在Tiburon发布后的日子里,这会使开发人员经常会打交道的功能类。

大概我们的程序里面也会多出诸如 
System.TMonitor.Enter(<obj>); 
//...
System.TMonitor.Exit(<obj>); 
这样的代码。这类似于Java中的
Synchronized(lock) {
   //...
}
这 样的代码。基本上,这等同于windows的临界区的作用(critical section),这是Tiburon引入的新的线程同步机制,使用TMonitor就可以告别那种跟windows api紧密耦合的锁控制同步的代码了,恩,所以我们有理由期待Delphi for Linux :)

另外八卦下,Delphi2009并行计算这部分的设计和实现都是allen bauer亲自操刀的。

最 后说下Compiler的改进。最最大改进的就是Generics,这个之前已经提过了,还有一个就是Pointer Math了,这个有C使用经验和开发中使用指针的同学的都会有体会,就是没有算数支持的指针支持是瘸腿的,有了Generic,有了算数指 针,Delphi在低阶开发支持上面基本就可以和C/CPP打平手了。可以参考下面的代码看看算数指针能给我们带来什么 :)

{$POINTERMATH ON}
procedure MoveRects(Rects: PRect; Count: Integer);
begin
   while Count > 0 do
   begin
     MoveRect(Rects[Count - 1]); 
     MoveRect((Rects + Count - 1)^);
     Dec(Count);
   end;
end;


最后就是反射Reflection,很遗憾,Tiburon没有为我们带来完整的反射API,但是,这里面有个玄机,就是估计是作DataSnap的steve的需求吧,现在有一个叫
$METHODINFO 的变易指令,steve是通过这个编译开关选项来得到完整的class metadata的,熟悉java的同学应该想到,没错,这个就是反射!不过这个目前只是给DataSnap的后门而已现在并没有RTL中有 Reflection的,只是估计是时间原因吧,希望我们应该会在下一版本中见到正式的Reflection支持。

最后,Delphi2009真的给我们带来了不少好东西,Delphi2009是个真正值得期待的版本,OK,一起期待吧。 :)

 

 

 

 

delphi2006语言新特性

内嵌类

内嵌类在类的内部声明,它被大量的应用在.net framework以及面向对象的编程中,它表明一种概念性关联关系,并且避免了命名冲突,它同样支持delphi win32编译。
定义内嵌类
它使用如下语句定义

type
  className = class [abstract | sealed] (ancestorType)
      memberList
      type
         nestedTypeDeclaration
      memberList
  end;   

当内嵌类定义遇到第一个非标识符时终止,例如:procedure, class, type和所有可见性范围修饰符。内嵌类与容器类同样适用正常的访问、可见性规则。一个内嵌类能存取它的容器类实例的变量(如字段,属性或者方法),但是 它必须要有一个参考对象。一个内嵌类能存取类静态字段(class fields)类属性(class properties)和类静态方法(class static methods)且不用参考对象,但必须遵守delphi可见性规则。
内嵌类不增加容器类的大小,建立一个容器类实例时不会同时建立内嵌类的实例,内嵌类与容器类仅仅是定义的上下文关系。
定义和使用内嵌类
下面的例子演示如何去定义和存取内嵌类的字段和方法。

type
      TOuterClass = class
       strict private
          myField: Integer;
        public
          type
             TInnerClass = class
              public
                myInnerField: Integer;
                procedure innerProc;
             end;

         procedure outerProc;
       end;

在实现内嵌类的innerProc方法时,你必须指定它的容器类的名字,例如:

procedure TOuterClass.TInnerClass.innerProc;
begin
   ...
end;

可以用 . 标志像存取一般的类成员一样去存取嵌套类的成员。例如:

var
   x: TOuterClass;
   y: TOuterClass.TInnerClass;

begin
   x := TOuterClass.Create;
   x.outerProc;
   ...
   y := TOuterClass.TInnerClass.Create;
   y.innerProc;
end;

内嵌常数
常数也可以同样在内嵌类型块中声明,常数块的结束标志与内嵌类块的结束标志一样,关键字或 可见性修饰符。内嵌常数不支持类型常量,如 Borland.Delphi.System.Currency 或Borland.Delphi.System.TDateTime 。它只支持简单类型,如:序数,枚举,字符串,实数等类型。
下面的代码演示声明内嵌常量

type
   TMyClass = class
        const
             x = 12;
             y = TMyClass.x + 23;
        procedure Hello;
        private
             const
                 s = 'A string constant';
    end;
 begin
   writeln(TMyClass.y);   // 输出y的值 35.
end.

delphi2006语言新特性-帮助类

帮助类(Class Helpers)
帮助类是联合其它类的一种类型,它能为联合类(包括它的派生类)增加方法 和过程。它为我们提供了一种不使用inheritance来扩展一个类的能力,你可以在任何地方使用帮助类,编译器自动决定在什么时候使用原始类还是增加 的帮助类。(注意:帮助类只是一种扩展一个类的方法,但是应该仅仅在为实现某种新目的而开发新代码时被使用,而不应该视为一个设计工具被使用。它是绑定语 言和平台RTL的 )
定义一个帮助类的语法:

type
identifierName = class helper [(ancestor list)] for classTypeIdentifierName
memberList
end;

ancestor list是可选的
一个帮助类不可以定义实例数据,但允许有类字段(class fields)
可见性规则与memberList语法与一般的类一样
一个简单类可定义并联合多个帮助类,然而,只有一个在源代码中特殊位置的帮助类才能被应用。在最近的范围被定义了的帮助类将应用。帮助类的范围是由delphi风格决定的(在单元中uses子句,由右到左)
(呵呵,上面这段翻译的好像不太准,暂且这样吧,欢迎指正)
下面演示定义一个帮助类:

type
TMyClass = class
procedure MyProc;
function  MyFunc: Integer;
end;

...

procedure TMyClass.MyProc;
var X: Integer;
begin
  X := MyFunc;
end;

function TMyClass.MyFunc: Integer;
begin
  ...
end;

...

type 
TMyClassHelper = class helper for TMyClass
procedure HelloWorld;
function MyFunc: Integer;
end;

...

procedure TMyClassHelper.HelloWorld;
begin
  writeln(Self.ClassName); // Self是TMyClass 类, 不是TMyClassHelper
   end;

function TMyClassHelper.MyFunc: Integer;
begin
  ... 
end;

...

var 
X: TMyClass;
begin
  X := TMyClass.Create;
  X.MyProc;    // 调用TMyClass.MyProc
  X.HelloWorld; // 调用TMyClassHelper.HelloWorld
  X.MyFunc;    //调用TMyClassHelper.MyFunc

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab坐标外围背景变白色发布时间:2022-07-18
下一篇:
###MATLAB-CUDA发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap