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 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

注意,帮助类的MyFunc函数被调用,因为它的优先于实际的类

delphi2005新特性

1, 简介

Borland Delphi 2005 是目前delphi的最新版本, 提供了在Microsoft Windows的操作系统和Microsoft .NET 框架 1.1 版本下的快速开发环境, 同时可用Delphi语言(适应win32和.NET 1.1)与C#(只能适应>NET 1.1)开发

产品总览

Delphi 2005 可以看成拥有三个不同的特性:一个使用Delphi语言(Delphi7的后继版本)的Win32特性, 和两个.NET特性:一个使用Delphi 作为开发语言(Delphi8的后继版本), 另外一个使用C#作为开发语言. 关于这裹说到的最后一个特性, Delphi 2005 是从 Borland C#Builder 1.0 升级而来的.

结论就是, Delphi2005是作为Delphi3 到 8和C#Builder开发者的下一个版本, 它在Win32下的快速应用开发和在.NET框架下一样优秀.

关键特性

-   支持三个不同的特性: Delphi for Win32, Delphi for .NET 和 C# 都同处于一个开发环境(和调试环境)中.

-   可以比较容易的在同一个开发环境中移植 Win32 应用程序到.NET中

-   新增一些Delphi语言的新特性如 多单元命名空间, for…in…do循环, 内联函数, 和其它的代码优化技术.

-   支持WinForms, ASP.NET WEB Forms 在可视化环境中的开发, 就如Borland自己在.NET和Win32上的VCL框架上应用程序的开发一样.

-   支持异质的数据访问(可以使用所有的ADO.NET 数据适配器—不仅仅是BdpDataAdapter), 多层的数据应用开发可使用新的 DataSync, DataHub, RemoteServer和RemoteConnection 控件.

-   支持重构来重新组织你的源代码, 以便提升代码的可维护性和成功重用代码的可能性.

-   支持DUnit和NUnit的单元测试, 可以在Delphi for Win32, Delphi for .NET 和 C#项目中使用极限单元测试框架来来提高你代码的质量.

-   支持ECO II (Enterprise Core Objects II)- 一种UML相应的对象模型框架和对象持久性, 通过Borland 数据提供者支持多种数据库, 并且现在也支持ASP.NET.

-   支持ASP.NET的DB Web 控件能使开发更简单的设计, 开发和分发功能强劲的带数据驱动的Web 应用程序.

-   支持版本控制和团队开发, 通过额外的插件StarTeam, 能针对你的项目做特别的务份和提供一个历史列表视图,

-   通过janeva for Delphi for .NET和C# 应用程序的解决方案, 内置支持J2EE企业级EJB, 或者CORBA服务器.

2. Borland Delphi 2005

这个白皮书将能从不同的范围分类来讨论Borland Delphi 2005 一些重要的增强功能. 首先, 将会提及到IDE 方面的增强, 接着是重构, 使用DUnit和NUnit的单元测试, 在数据访问和Web 方面的增强, ALM的支持, 最后谈到Delphi编绎, 语言和调试器方面的增强.

2.1 IDE

Delphi 2005 的可视开发环境(IDE) 在下面提到的各方面都有了意义重大的扩展和增强.

欢迎界面

欢迎界面已经重新设计过了, 不仅显示最近打开过的项目, 还显示Borland 开发者网络和RSS的最新新闻(需要到internet的联接)

多样化的特性

Delphi 2005 支持多样化的特性, 体现在同时支持 Delphi fro Win32, Delphi for .NET,和C#项目. 这裹有个小小的有用提示, 一个个性化图标会在IDE工具条上显示当前选择的类型(Delphi for Win32 对应 , Delphi for .NET对应, 而 C#对应 ).

项目管理器

Delphi 2005 带的项目管理器现在能显示整个项目的目录结构(如果是ASP.NET项目, 甚至还提供了在当前项目目录下创建和管理子目录的功能), 这样能更直观的让你知道文件的放置位置和决定那个文件是要分发给用户的. 在一个项目组中, 我们能够增加项目到不同的目标中(和特性中), 或者从一个项目移动到另外一个中—也就是将一个立即特性转到另外一个中.

现在项目管理器和对象检视器已经能够配合使用, 只要你要项目管理器选择一个文件, 对象检视器就会显示对应文件相关的信息, 如文件名, 文件的全路径, 还会加上相关的属性如文化,名字, 装配器的版本号, 或者本地副本的选项,. 大部分显示的属性是只读的(用灰色字体显示), 当然, 部分是能够改变的, 如文件名, 本地副本的状态,. 项目管理器同时能感知 StarTeam, 并且在管理存储在StarTeam中的项目时, 能根据输入命令提供相关的上下文感知提示.

备份和历史列表

Borland Delphi 2005 在你的项目目录下提供一个隐藏的给你的源码提供简易的维护多级别务份和历史列表的功能,. 这代替了旧的用 ~文件名的方式. 那个 __历史列表目录能够包含项目的多个版本(默认是最后十个维护的版本), 并且能够作为本地的文件版本控制仓库.

历史视图被用来对你的项目文件当前版本的检查和备份不同的版本, 而且还提供了一个非常有用的(智能的)比较不同版本间文件区别的视图. 直观的显示你在源代码中做的加入或移除或修改的动作. 除了能浏览代码的改变之外, 你还能撤销以前做的改变,回到你以前备份文件的时间点.

历史视图同时支持 StarTeam 给你的项目提供更加完全的团队视图历史列表(参考ALM部分)

浮动的VCL设计器

Borland Delphi 2005 现在提供了对自由浮动设计器的选择, 就象以前的Delphi7和更前的版本(相对于固定设计器的Delphi8). 默认的情况是使用嵌入式的设计器, 但是你能在Delphi的提供的选项中找到对应的VCL设计器的那个对话框, 然后去除嵌入设计器的选项来取消嵌入效果.

Delphi 2005 工具选择对话框

这个功能不仅能让你同时观察你的Form设计情况和源代码, 还让你能够在设计时同时观察多个Form和数据模块.

同步编辑

Borland Delphi 2005 提供一个新的同步编辑功能, 它允许你在一个选择的代码区域内修改多个出现的变量 (例如, 允许你同时对它们重命名). 注意这个功能比较有限的,只适应用小区域的源代码修改中使用(如一个过程或方法中的代码), 如果你想在一个大的代码区修改标识符, 建议你还是使用重构, 它使用带有语法和语义分析引擎.

Delphi 2005 同步编辑的效果

错误实时提示

Borland Delphi 2005 的IDE提供了一个新的功能叫错误实时提示(Error Insight), 可以在你输入delphi, C#, HTML代码的同时高亮显示输入的错误语法. 错误实时提示会在错误的语法下面显示一个红色的斜体提示, 该信息将包括关于对应错误的更多信息. 这个功能甚至能够帮你在开始编绎项目之前就能修正源代码中的语法错误. 此外, 对于未声明的标识符各误拼写的关键词和保留字, 错误实时提示还能误别出该符号并没有在当前范围声明(就好象在一个命名空间中的类型在被使用前, 必须用uses 或者using标识出来)

关联查找

Borland Delphi 2005 IDE拥有一种增强的方法来查找关联代码, 它后台是使用重构引擎, 可以通过查找结果来导航到你的源代码. 你能查找本地(在一个单独的源文件中)的符号引用(如字段, 方法, 属性, 变量等), 或者你能在项目的所有源文件中查找和检查所有相关引用,

相关引用用一个树状列表列出, 每个节点直接对应的项目中的代码. 如果你双击一个节点, 代码编辑器将出现并显示到对应的源代码. 这是一种简便快速的访问源文件的方法.

Dlphi 2005 关联查找树状列表查找结果

关联查找结果总是可以在菜单”views” 下找到, 树状列表甚至能在同时包含不同的查询结果, 并且显示上一次的查询结果.

帮助实时提示

新的帮助实时提示针对标识符提供了类似类,属性,方法或者事件在输入时类似的行为.  帮助实时提示在不同的状况下会有两种不同的显示方法:或者用弹出气泡的方式, 或者和弹出的代码实时提示结合在一起显示.

当将鼠标移过一个标识符是时就会弹出一个气泡式窗口的实时帮助提供. 它将会针对特定的标识符产生一个工具性的提示窗口来显示相关的信息, 包括到在线帮助的相关链接.

你还能得到一个和代码实时提示合成的帮助实时提示窗口, 在裹面会根据代码实时提示窗口中选中的节点对应的条目给出进一步的帮助提示. 在你选择了一个属性, 方法或者事件后, 又需要知道那一个才能满足你想要的目的的时候, 显得特别有用.

Delphi 2005 帮助实时提示配合代码实时提示时

帮助实时提示一样能对你自己定义的类和方法产生相关提示.

结构视图

Delphi 2005 IDE左上角包含了一个结构视图. 这个窗口在某些场合特别有用. 它能显示代码编绎器中源代码的继承结构. 同样, 它也能显示HTML设计器中包含的HTML控件, 就象VCL窗体设计器显示可视化控件的继续结构一样. 对于源代码结构, 结构视图还能动态的在顶层出现一个”错误”节点显示错误实时提示窗口中找到的所有语法错误.

Delphi 2005 结构视图

当检看可视控件的结构时, 你能双击结构视图中对应的条目来定位到窗体设计器中对应的控件. 当你观察相应HTML 源代码的结构时, 你能双击相应的条目来转到代码编绎器中对应的声明位置.

查找结果

现在当你执行一个查找时, 结果会根据文件名分组显示在一个直观的树状控件中. 你能直接通过文件浏览它们, 也能打开节点来观察在相应文件中找到的每一个对应点.

工具面板

现在工具面板的定位机制已经得到增强, 你只要输入控件的第一个字母就能立即得到一个只包含起始字母与你输入相符的过滤后的类别列表. 并且会高亮显示显示你输入的字母, 和能够在你继续输入字母时进一步的过滤. 按”enter”键将会在设计器中的窗口放置上一个当前选择的控件.

工具面板向导

除了显示控件(在设计视图)或者代码摘要(当处于代码编绎器中)之外, 工具面板现在还能在对象仓库开始一个新项目时显示一个向导, 并将对象仓库中的类别转成工具面板上的类别. 这个功能允许你能够用快捷键轻易的在向导中创建新的文件, 项目, 对象.

2.2 重构

重构是一种对存在的源代码重新组织结构的过程, 在没有修改代码的行为和输出的前提下, 使代码更容易被重用和维护.

Borland Delphi 2005 带的重构支持包括许多用用的特性, 有”提取方法”到声明新的变量或字段, 到提取成资源字符串, 再到重命名标识符和复位义命名空间和uses 子句.

Delphi 2005 重构菜单

重命名标识符[Delphi/C#]

While the Sync Edit feature allows you to lexically rename identifiers in a selected section of source code, for larger sections of source code Delphi 2005 refactoring offers the option to rename symbols (like fields, methods, properties, variables, etc.) using Refactor - Rename. The refactoring dialog will even allow you to view all references before refactoring (so you can verify all places where the rename will be made).

虽然代码同步编号器可以让你在选择的源代码区域中重命名标识符, 对于范围更大的源代码, Delphi 2005的重构提供了rename这个功能来修改标识符(如字段, 方法, 属性, 变量等).重构对话框甚至还可以让你在重构之前先浏览所有涉及到的引用(这样,你能验证所有被修改到的地方).

This feature adds real refactoring intelligence to the standard search and replace functionality, by not just renaming any symbol within the current scope, but only those that are indeed the same as the selected symbol .For example, if you have both a method X and a local variable X, and you want to rename only the method X, Refactor - Rename ensures the local variable X will be left alone, as it recognizes it’s not the same as the method X).

这个智能重构的特性被融合到查找,替换功能中, 但它不仅用在修改当前范围的所有标识符, 还能只修改与选择的标识符真正相关联的代码. 例如, 如果你同时有一个方法名为X和一个局部变量X, 当你只是想修改方法X的名字时, 重构中的重命名功能会确保忽略对局部变量X的修改, 因为它能区分变量X和方法X并不相同.

变量声明 [Delphi]

当在写代码的时候, 偶尔会还没有声明一个变量就先使用了. Delphi 2005 的重构允许你使用重构中的Declare Variabl来自动声明这类变量, 它会显示一个对话框来让你指定变量对应类型, 然后增加这个变量的声明到当前区域.

这个选项只在当前变量还没有声明时才可用, 当然应变是这样, 这样的好处是, 它还允许你将精力集中在代码和算法逻辑中, 而不用移动到代码的首端来增加一个变量的声明. 变量声明和错误实时提示配合得很好, 当在错误实时中出现一个高亮显示的未声明变量提示时, 只要简单的右击这个变量来声明就可.

字段声明[Delphi]

和声明未声明的变量类似, Delphi 2005 重构提供了重构--Declare Field来允许你你给一个类声明字段. 如果在同范围内要声明的字段和已经存在的字段名有冲突, 重构将会出现一个对话框来让你解决冲突.

这个功能将会在给类扩展增加功能时节省很多时间, 不会再强迫你转到类的声明部分, 然后手工给字段定义.

抽出方法[Delphi]

Delphi 2005 重构功能允许你选择源代码的一部分(可能这部分在几个不同的地方重复出现, 或者其它地方需要相同的功能), 并将这部分代码抽出来转为一个方法, 这个重构生成的方法将根据声明的变量自动取得相应的参数列表, 而原来选择部分代码的位置将会由一个呼叫新重构方法的代码取代. 将一个长的代码段分割成几个方法能够提高代码的可重用性和可维护性.

抽出资源字符串[Delphi]

再也没有比用硬编码引用字符串来实现部分源代码的国际化多语言支持困难了. Delphi 2005 重构功能现在允许你将使用到的字符串抽出来生成资源(在你的代码实现部分增加资源字符的声明)

导入命名空间[Delphi/C#]

有时, 你会用到在其它命名空间中定义的类, 方法, 字段或者类型, 为了将相应的命名空间增加到uses子句中(相对Borland Delphi)或者 using子句中(相对C#), Delphi 2005 的重构提供了自动将选择标识符对应的命名空间导入的功能.参看重构中的Import Namespace..

这个功能将让你省下很多查找命名空间的时间

2.3  NUnit/DUnit 单元测试

单元测试是一种给代码增加测试的开发方法, 它通过运行测试项目来运行和验证他们自己, 并根据源码的有效性产生报告. 最好的效果, 单元测试应该在一开始就正确应用, 当你在写实际代码的同时就应该增加相应测试单元到其中(一些人甚至认为你应该先写测试代码, 再写真正代码来测试), 单元测试在重构中也扮演了重要的角色,如果只是为了验证重构后的源码是否有改变原来的行为, 这是一个正确的选择.

DUnit/NUnit

单元测试框架平时也称为极限测试框架, 和极限编程有关.Delphi 2005 包括DUnit(相对Win32和.Net) 和 NUnit. DUnit (http://dunit.sourceforge.net/) 是Delphi 版本的单元测试框架(同时适应Win32 和 .NET), 而 NUnit (http://www.nunit.org/) 是和种 .NET 语言无关的单元测试框架, 能同时用在C#和Delphi for .NET 上.

测试项目向导

对每一个项目而言, 你能通过测试项目向导增加一个对应的测试项目到项目组中. 对于 Delphi Win32项目, 将是使用DUnit 测试框架,. 对于 Delphi for .NET 项目, 你能选择使用.NET版本的DUnit 测试框架, 或者选择NUnit 测试框架, 而最后对C#项目来说, 将是使用NUnit 测试框架. DUnit(相应于.NET和Win32)和NUnit 测试框架都提供了可以选择生成图形界面或者控制台方式来执行来显示测试结果.

测试样例向导

在一个测试项目裹面, 你能使用测试用例向导来增加一个特定的测试用例以便对项目中的某些单元进行测试. 对每一个单元, 你能选择需要的类和方法增加到测试用例中. 同时, 也会生成一个测试样例的例子, 让你以后可方便的参照增加自己的测试代码.

测试运行者

只要给测试项目中增加测试用例, 就会产生独立的测试运行环境, 你就能在Delphi 2005 的IDE中开始运行相关的测试, 并且观察运行结果. 你能得到所有错误和运行失败(如果有的话)的反馈报告, 并且出错时, 测试将会停止, 并在控制台显示出结果.

使用单元测试, 能帮助提高你代码的质量, 可维护性, 和可重用性. Delphi 2005 IDE整合了单元测试使更容易实现单元测试.

2.4          数据库

Delphi 2005 提供对ADO.NET , VCL, VCL for .NET 的数据访问做得一样的好!

ADO.NET 数据访问支持

Delphi 2005 实现了不少数据访问功能的增强, 最显着的是ADO.NET 方面, 但在BDE, dbExpress和新增的dbGO for ADO.NET 也有不少改进.

增强的Borland 数据提供者

现在有不少ADO.NET对应的Borland数据提供者得到改进, 包括支持 interBase 的Boolean 字段, Oracle 包机制, 本地数据表支持, 获得数据结构表, 还有支持 Sybase 12.5.

还有如下的经过认证的BDP ADO.NET 数据提供者驱动: Borland InterBase 7.5(也能在InterBase7.1,7.0和6.5上工作, 但没经过认证), Oracle 10g(同时也能在Oracle 9.2.0 和 9.1.0上运行), IBM DB2 UDB 8.x(能上7.x 上工作), 此外, 还能在Microsoft SQL Server 2000, Microsoft MSDE 2000, Microsoft Access 2000, 和Sybase 12.5上工作.

增强的设计器

数据库设计中一个重要组成部分ADO.NET设计器在Delphi 2005 中也得到增强. 增加了新的存储过程测试支持, 这样你就能测试指定存储过程, 包括输入参数, 然后运行存储过程并且检查返回参数的值(如果有的话)

Delphi 2005 测试SUB_TOT_BUDGET存储过程对话框

数据表映像功能帮助你为BdpDataAdapter指定映像到相应的数据表. 你能设定DataTable上的栏目到一个带有更具体描述的内存表DataSet中映射关系. 你也能增加或移除内存数据表中的栏目.

对象设计器现在也为SQLConnection控件提供了一个联接字符串编辑器, 允许你指定ADO.NET provider的联接字符串.

异类数据支持, BDP 远程对象

新ADO.NET控件中提供了RemoteServer 和 RemoteConnection这两个控件来支持快速开发三层的应用程序(使用.NET 远程对象的结构). 另外两个新的ADO.NET控件, DataHub和DataSync, 支持将不同类数据库聚合到一个数据集. 这四个控件能组合使用, 这会导致分布式应用程序会使用大量不同的ADO.NET数据提供者. 在这个结构, DataHub和RemoteConnection处于瘦客户层中, 而RemoteServer和DataSync 控件将处于服务层, 并联接到数据提供者.

BdpDataAdapter的自动更新功能也得到增强, 现在能解决多数据表更新, 并且能处理更多的错误情况.

数据迁移

BDP控件组中有一个特别的控件bdpCopyTable中支持数据迁移操作, 它使你能够将BDP支持的数据表复制到另外一种类型上.

数据集类型(.NET)

数据表类型现在能够编绎成标准.NET装配件. 它还支持Web Services的数据集. 项目管理器提供一个上下文相关的菜单来设置数据集中的关联和数据表编辑集合, 这样, 你能更方便的修改数据集类型

增强的数据库浏览器

BDP 数据提供者相应的数据库浏览器已经在几个地方作了增强。 现在可以简单的将数据从一个BDP数据提供者迁移到另外一个,这个功能能够允许你将一个数据表从一个BDP数据提供者复制另外一个上面. 这样会复制和重新建立复制目标数据表的元数据, 即使这个数据根本就是来之不同的数据源, 如将Oracle的数据迁移到MSSQL上.这和BdpCopy控件的行为类似.

数据库浏览器还有查看额外的元数据的能力, 并且允许你直接在数据库浏览器中查看和修改数据库模型, 你能直接在裹面创建新的数据表, 修改数据表还有删除存在的数据表.

同时, 你还可以直接在数据库浏览器中拖拉一个存储过程到窗体设计器中, 这样, 将会创建一个BdpConnection(如果需要)和一个BdpCommand实例, 并且自动设置BdpCommand的参数对应到指定的存储过程.

VCL和VCL.NET的数据库支持

Delphi 2005中对VCL和VCL.NET的数据库支持由BDE, dbExpress和 dbGo for ADO,以及InterBase Express(IBX)组成, 这些数据访问技术同时在于VCL和VCL.NET的项目中可用, 这样, 提供了一个无缝的升级Win32程序到.NET的方法.

dbGO for ADO

在创建一个VCL.NET的应用程序, Delphi 2005 现在同时支持Win32和.NET的 dbGO for ADO, 这样使移植Win32 dbGO for ADO的应用程序到.NET框架变为可能, dbGO for ADO控件需要安装MDAC 2.8 来支持.

dbExpress

dbExpress 控件组扩展了TSimpleDataSet来支持.NET, 并且提升了TSQLStoredProc的执行效率, 同时也对元数据进行改进.

下列的驱动现在已经通过认证可直接用在dbExpress: Borland InterBase 7.5 (同时也能使用 InterBase 7.1, 7.0 和6.5, 但没经过认证), Oracle 10g (能使用 Oracle 9.2.0 和 9.1.0), IBM DB2 UDB 8.x (能使用 7.x), Microsoft SQL Server 2000, IBM Informix 9.x, SQL Anywhere 9 (能使用 ASA 8), MySQL 4.0.x, and Sybase 12.5.

BDE

针对VCL和VCL.NET应用程序的Borland 数据库引擎(BDE), 用来支持本地的dBASE和Paradox数据集访问. BDE for .NET 版本现在已经改进, 不再需要指定路径, 能自动装载BDE相关的DLL文件了,  它还改进了访问BLOB的性能, 还新增了几个以前没有的, 针对.NET的BDE控件, 它们是: TUpdateSQL, TNestedTable, 和 TStoredProc.

IBX

InterBase Express (IBX)提供VCL和VCL.NET应用程序直接联接到InterBase 的功能.

2.5 Web

Delphi 2005 包含了大量在VCL(Win32和.NET)和ASP.NET下增强的Web开发技术.

Web部署管理器

Delphi 2005 亲增了一个Web部署管理器, 能使用在ASP.NET Web Form各ASP.NET WEB Service项目中, 同时期intraWeb能够同时适应VCL和VCL for .NET.Web部署管理器能够联接到目录(本地的或者网络上的)和FTP 目标. 部署管理器的窗口还能同时显示本地的文件(从项目目录中)和远程的文件(从目录或者FTP位置), 而且你只需单击一个选项就可实现整个项目的部署. 你还能执行比较, 移除文件等到操作. 部署的设置就与你的项目文件保存在一起, 所以, 你能以一致的配置方式在不同的时间部署你的项目. 这个是一种非常有效和快捷的部署方式.

除了支持ASP.NET和IntraWeb项目之外, Web部署管理器还能扩展来支持的其它不同的项目类型.

Web数据控件

Web 数据控件能用来编写功能强大的数据驱动的ASP.NET web 窗体应用. Delphi2005 引入了大量新的Web数据控件, 包括DBWebAggregateControl, DBWebSound, DBWebVideo, 和 DBWebNavigationExtender等,.

DBWebAggregateControl能用来显示数据集中各个栏目的聚合值,  实际上可能用来显示平均值, 计数值, 最小值, 最大值, 总额.

DBWebSound和DBWebVideo控件被加进来支持音频和视频格式. 可以通过一个DBWebDataSource控件联接到数据集对应的字段或给它一个URL路径.

DBWebNavigationExtender控件在下列这种情况下非常有用, 就是你想将数据修改发送到数据集, 而又不想使用DBWebNavigation控件时(特别是控件中那个ApplyToServer按钮). DBWebNavigationExtender是一个非可视化控件, 能被用来扩展标准的Web控件--如按钮—它带有的功能和DBWebNavigator的按钮一样. 所以, 你能用它来编写一个自己的导航条控件. 除了这四个新Web控件外, DbWebDataSource控件被扩展增加了一个OnAutoApplyRequest事件, 并且现在支持嵌套的更新和删除.

除了DbWebDataSource之外, Web数据控件现在还能联接到EcoDataSource—一个联接到ECO II ExpressionHandler的控件.

Delphi 2005 还提供了一个新的Web数据控件向导让你能编写兼容于ASP.NET控件的自己的Web数据控件(同样能联接到DbWebDataSource 或者 EcoDataSource)

Web数据控件现在支持XML缓存, 这个强大的功能能给web客户端实现一个服务端公文包.

Web 数据导航

Delphi 2005 Web数据控件现在拥有控制导航命令的功能, 它使用相应的导航API, 如RegisterNextControl, RegisterPreviousControl, RegisterFirstControl, RegisterLastControl, RegisterInsertControl, RegisterDeleteControl, RegisterUpdateControl, RegisterCancelControl, RegisterUndoControl, RegisterUndoAllControl, RegisterApplyControl, RegisterRefreshControl, 和 RegisterGoToControl.

服务端控件

ASP.NET的HTML类控件现在能在后台文件用代码表示成控件了, 通过选用”Run AS Server Control”这个选项, 将会增加一个 runat=server 属性到控件的脚本中, 这就好象在控件的源码文件中直接声明.

模板编辑器

Delphi 2005 现在为DataGrid和DataList增加了一个模板编辑器, 让你能够定义和更容易的编辑你自己定制的栏目模板.

IntraWeb

当使用VCL(Win32或者.NET)时, Delphi 2005 支持使用AtoZedSoftware (www.atozed.com)公司的IntraWeb来开发应用. IntraWeb允许快速的所见即所得式来设计Web应用程序, 很象ASP.NET, 但还是有很多地方不同. IntraWeb 对的优点就是对用户来说不用关心底层的HTML语法和能够帮用户管理网页的状态, 这些ASP.NET是做不到的. IntraWeb 类的WEB 应用程序和非可视化的VCL控件是兼容的, 如数据访问面板中的BDE, dbExpress, dbGo for ADO和InterBase Express(这个意味着可以从Win32迁移升级到.NET), 相反, ASP.NET的应用程序要拥有数据访问的能力必须使用原生的.NET控件, 如ADO.NET和BDP.

2.6 企业核心对象 ECO II

Borland C#Builder 1.0和 Delphi8带了第一版的ECO, 现在在Delphi 2005 中得到了极大的加强来适应有高伸缩性要求的企业应用开发. 相对初始版本, 在 ECO II有不少改进增强.

其中最重要的增强总结如下:

- 支持可伸缩性, 分布式应用程序

- 支持 ASP.NET ( Web Forms 和 Web Services)

- 支持映像到一个存在的数据库

- 针对易用性优化, 以使使用ECO流程更加容易

可伸缩性, 分布式应用

最重要的部分是, ECO II 现在具有企业级的伸缩能力. 相对第一版本的client/server 解决方案, ECO II 同时支持client/server 和远程解决方案. 当你编写有伸缩能力的ASP.NET或者WinForms应用程序时, 有几个可能采用的结构. 都非常简单易用. 在同进程中或不同多进程中,    想同步多个不同缓存对象如EcoSpaces 时, 可以用新增的PersistenceMapper来管理,. 同步持久性的映射关系可以在同进程内部自我执行, 或者, 更可能的情况, 在服务器中的一个进程运行.

ECO II and ASP.NET

现在使用Dephi 2005, 我们能够组合ECO II和ASP.NET一起使用, 同时适合ASP.NET Web窗体和ASP.NET Web 服务方式.Borland 的Web数据控件通过给EcoSapce绑定到一个新的EcoDataSource组件来导出对象, 这是用OCL的表达方式来输出一个数据源, 并且还能产生一个数据感知的ASP.NET WEB 窗体中. 同样的操作能适合任何常用的原生ASP.NET Web 控件. ECO 组件, 如ExpressionHandler, 能够提供一个可以当成DataSet 的元素列表, 并且可绑定到任何ASP.NET 组件上, 如DataList 和 DataGrid. 因为对ASP.NET应用程序提出的请求都是无状态的, 我们能够在session 或者在应用层次上维护EcoSpace的状态.

ECO II 使用乐观锁, 当发生冲突时, 会使用冲突决议来决定执行正确的动作.特别在当一个Eco Sapce检测到在后台数据库的数据和在EcoSpace中保存的”旧值”不同时, 它将会注册一个冲突到EcoSpace内部列表中. 开发者能调用RetrieveChanges来得到其它EcoSapces中发生的任何改变, 还可用GetChanges来收集未解决的冲突, 并决定如何处理(通常由最终用户控制决定如何解决)

Delphi 2005 设计时的ECO II ASP.NET Web 窗体

映像到现存的数据库

带有ECO II的Delphi 2005 现在有可能利用现存数据库来实现应用程序持久性. 它是利用一个新加强的使用XML文件模型驱动的对象-关联映像来实现. 这个强大的菜单达已存在的MS SQL server, ORACLE 或者 InterBase 数据库, 并且如UML模型一样建立映像模型, 并且用类将数据库的数据封装起来.

增强的EcoSpace设计器

EcoSapce 的功能在Delphi 2005中得到很多的增加, 包括拥有产生默认的XML模型映像文件, 将ECOI的数据库格式转为ECO II的格式, 拆包/包装一个现存的数据库. EcoSpace设计器同时增强了气泡式提示, 显示当前一系列需要完成任务的列表, 例如下图的PersistenceMapperBdp.

Delphi 2005 ECO II 设计时气泡式提示

工作任务列表会自动检查, 所以, 你永远都会得到一个最新提示, 提示你什么是已经完成的, 那一步还需要继续工作.

另外一个用气泡提示的例子, 当你打算打开一个新的ECO包时, 气泡提示会显示所有你选择的ECO包中定义的类名.

ECO II 项目对象

Delphi 2005 现在能产生几个不同的ECO II项目. 对于C#类型, 我们能创建一个ECO ASP.NET Web应用程序, 或者ECO ASP.NET Web Service, 或者 DLL中的ECO Package(所以我们能在另外的项目中引用这个EcoSapce来使用对应的DLL), 还有ECO WinForms 应用程序. 对于Delphi for .NET类型, 我们能创建ECO ASP.NET Web 应用程序, ECO ASP.NET Web Service和ECO WinForms 应用程序.

2.7 ALM

Delphi 2005 内嵌支持Borland 应用程序生命周期管理套件, 包括CaliberRM, StarTeam, 和 Janeva

整合StarTeam

StarTeam 提供源码版本控制的支持, 包括需求管理, 缺陷跟踪, 分组讨论记录, 远程协作开发. Delphi 2005 包含一个内置的StarTeam客户端, 可以从菜单StarTeam或者项目管理器的右键菜单中调用, 你可以在Delphi 2005 的IDE界面中操作StarTeam. 你能将一个项目放到StarTeam中, 可以检出文件, 也可以导入文件, 或者恢复到以前旧版本的代码. 锁定或者解锁StarTeam仓库中的文件, 等等操作.

此外, 历史管理器还支持StarTeam, 所以, 可以在本地的备份中或者StarTeam的仓库中访问,比较和恢复备份的文件.

内置Janeva

Delphi 2005 内置支持Janeva(在企业版和设计师版). Janeva能用来联接.NET客户端(C#或者Delphi for .NET编写)到 J2EE的EJB 或者 CORBA 对象中. 当安装了janeva(也就是安装了Janeva IDE 插件), 在项目管理器的项目节点上会新增两个菜单, Add J2EE Reference... 和 Add CORBA Reference..., 可以用来增加特定的引用.

菜单Add J2EE Reference...在你选择从一个.jar文件选择一个EJB时会出现一个对话框, 而当你Add CORBA Reference...会在你选择一个包含接口定义的CORBA对象的.idl文件时显示一个对话框.. 在导入.jar或者.idl文件后, 你将得到一个原生对象, 它可以直接在.NET客户端使用, 现在将不再需要额外的层(象Web Service 或其它网关类软件), 而是利用 Janeva 装配器直接联接到J2EE EJB或者CORBA对象上. 以前版本的Janeva插件(C#Builder带的)能产生C#代码, 但Delphi 2005 产生的装配件可以被任何.NET语言使用. 现在的Janeva 插件向导会根据janeva客户端软件产生相应的参数, 然后自动产生对应的app.config 文件.

*Janeva 要求分发你的应用程序时要带有运行时许可证, 你可在Borland 的销售许可中找到

2.8 编绎器/语言/调试器

Delphi 2005 编绎器, 语法, 调试器都有不少增强.

编绎器和语法的增强

Delphi 2005 编绎器实现了几个性能有关的增强, 使编辑速度加快了. 编绎器现在已经支持Unicode和UTF8格式的源代码文件, 可以使用Unicode来定义标识符和符号.

For ... in ... do

Delphi 语言增加了一个新的 for-loop 语法. 和 foreach 结构类似. 这个强大的特性可用来迭代访问一个集合的值.

内联函数

Win32和.NET的Delphi语言都增加了内联函数, 使用它能提升程序的性能. 它取代了直接呼叫例程, 而是直接将被呼叫的例程的代码放到呼叫代码的位置(节省了呼叫和返回的时间, 还有参数管理的时间). 这个对小的例程, 不在同一单元范围的例程, 或者带有多参数的例程非常有用. 而对大的例程, 在应用内联之前要仔细考虑效率和生成代码大少之间的利弊.

我们能直接用inline来标识一个内联例程, 还可以使用{$INLINE AUTO}这个编绎指示. 后一个操作, 会让编绎器自己选择那些看起来会提升系统性能的例程进行内联. 使用{$INLINE ON}编绎指示是你指定了从这个编绎指示开始的例程都将用内联方式.

有很多反对者认为在编绎器中并没有实现内联, 例如, 即使你能内联包(装配件)中的不内单元的例程,你不能跨包进行内联. 同样, 不可能内联虚方法, 动态方法或者消息方法, 同样不能内联接口和dispinterfaces.

多单元命名空间

上一个版本的Delphi for .NET 编绎器采用了将一个单元映像到一个命名空间的方法(这样单元的名字将就是命名空间的名字). Delphi 2005 中扩展了这种方法, 现在一个命名空间可以由几个单元组成. 例如带一个单元名为Comp.Group.MyUnit.pas, 左手边的Comp.Group是命名空间的名字, 而MyUnit.pas就是在命句空间里的一个局部单元范围. 这个可以让我们使用多个单元而设置他们同属于一个命名空间(处理ASP.NET 的自定义控件是, 现在能用一个单一的控件前缀).

Delphi2005新的命名空间功能带来的另一个效果是, 现在有可能使用Delphi2005来给现存的命句空间扩展功能. 例如, 可以新增一个MyUnit.pas单元给System Web 命名空间扩展新的类和类型 护展了的命名空间将成为所有包含System.Web.MyUnit.pas的应用程序和装配器的一部分.

增强的调试器

Delphi 2005 Win32的调试器现在增强了对没有带调节试信息的Win32堆结构的支持. 当在IDE中调试时, 还带有一个专门处理异常的对话框. 当一个异常被引发时, 将会有一个对话框弹出来让你有机会选择忽略这个异常类型 还是检查这个异常对象, 包括一个选项来决定是真正引发还是继续执行.

断点列表

内置编辑器也加强了断点列表, 现在很适合用在条件句中或者群组中, 启用和停用断点可以简单的在一个CheckBox 列表选择就可. 这样就不用弹出一个对话框选择, 可以加速设置断点.

Delphi 2005 带有可编辑字段的断点列表

在断点窗口还有新的工具条.通过它你能直接删除一个断点, 或者删除全部, 或者使全部立即都启用, 或者编辑某个断点的属性.

新的调试视图

Delphi 2005 包含4个新的Delphi 窗口. Borland Delphi8 for .NET提供了断点的调试窗口, 调栈窗口, 监视窗口,线程和事件日志. Delphi 2005 增加了FPU, 本地变量, CPU和模块窗口.

Delphi 2005 现在还提供了一个模块窗口, 可以显示应用域, 并且允许你操作应用域中的命名空间和配件的细节. 你能够按名字或者基地址来排序显示模块.

CUP窗口是显示当前源码, 它能显示IL(中间语言)和本地机器汇编语言,还有伪代码

Delphi 2005 混合Pascal, ILASM和机器码的CPU 窗口

并行调试

使用Delphi 2005 IDE不仅可以用项目管理器同时装载多个项目, 你还能同时运行Win32和.NET调试器。 你可以在同一个开发环境中调试Win32和.NET应用程序. 你甚至可以同时运行两个调试器, 在项目管理器中切换到不同的项目(从一个语言切换到另外一种)

总结

这个白皮书介绍了Delphi 2005 的关键新功能, 也介绍了一些已存在的技术的增强部分.

就如你所看到的, IDE拥有一个增强的欢迎页, 支持多语言, 备份历史文件支持(可选择内嵌的StarTeam), 浮动的VCL设计器, 同步编辑器, 实时错误提示, 实时帮助提示, 结构视图, 帮助查找, 更好的检索查找结果的功能, 工具面板向导帮助你更快的开始一个新项目.

重构也是Delphi 2005 中的一个重要的新特性, 提供了重命名符号, 声明变量, 声明字段, 抽出方法, 抽出资源字符串,到导入命名空间.

另外一个额外重大的支持是DUnit和NUnit单元测试, 内置于IDE的测试项目和测试例程向导.

在数据库方面, BDP组件更新了新的驱动, 增加了BdpCopyTable 组件, DataSync t DataHub组件来支持异构的数据库. 而RemoteServer新增了RemoteConnection组件来编写三层的.NET数据库应用(DataSync 和 DataHub, 如果你需要, 可以甚至是异构的数据库或者三层).

对于Web开发, ASP.NET的调试器得到增强, 新增了dbWeb控件来处理计算的数据, 声音, 视频和导向条事件, 支持DataGrid和DataList的模板编绎器, 最后, intraWeb同时支持Win32和.NET WEB应用开发.

企业核心对象(现在是ECO II)也加强了支持可伸缩性, 分布式开发, 支持ASP.NET(普通的和dbWeb控件), 并且具有在ECO模式中映像到已存在数据库的能力.

Delphi 2005 提供内嵌的Borland ALM工具, 包括StarTeam,和Janeva(可以联接J2EE和CORBA服务器).

最后, 但不是最不重要的, 在编绎器和Delphi语言的许多方面都得到增强,如新的 for…in 循环, 内联函数, 跨单元命名空间. 调试器得到增强, 使用了更好的断点列表新的.NET调试窗口, 和并发的Win32和.NET项目调试.

有史以来最好的Delphi

无论你的目的是在Microsoft Windows操作系统还是在Microsoft .NET1.1框架版本下开发组件或者应用程序,, Delphi 2005 对现代Windows开发提供了广泛的, 高生产力的, 高质量的支持。

官方正式发布了Delphi 10.3.2,增加对Mac 64应用的开发,支持Linux桌面开发,这个是通过集成fmxlinux实现的,同时修正400个bug,编译器,102个ide,84个fmx等方面的,就照这个400个bug,也值得升级。

这是官方的下载地址:http://altd.embarcadero.com//download/radstudio/10.3/delphicbuilder10_3_2_496593b.iso

这是更新说明地址:http://docwiki.embarcadero.com/RADStudio/Rio/en/10.3_Rio_-_Release_2

Bug fixed:http://docwiki.embarcadero.com/RADStudio/Rio/en/New_features_and_customer_reported_issues_fixed_in_RAD_Studio_10.3.2

这个版本与上周官方发布10_3_2_496593的版本,没有区别,对于已经安装的用户可以不用重装。

安装前,需要先卸载Delphi 10.3.1,然后就是正常的安装过程,非常顺利,现在差不多半小时就安装完成。

安装后,启动Delphi,发现原来用的控件都在,Lib目录也没变,这个挺人性的。

编译手边的项目,超呼想象之外,没遇到任何问题,看来这个版本对于10.3.1的兼容性做的真是好。

编译android app,并发布到手机进行测试,有点感觉就是速度有所提升,目前还没有发现问题。

项目用了ChinaCock组件,现在还没有发现有问题。

IDE的界面效率有所提升,最大最小化后,反应要比10.3.1强不少,不过在我的虚拟机上,还是有点卡,最大化时不能秒开,是不是有点要求太高了!

打开旧的项目,这个感觉明显,基本秒开,要赞一个!

由于用了10.3.1老猫做的fixed,遇到自定义字体文件的问题,手工修改,只是一个文件,也非常顺利。

这个版本基本兼容10.3.1的控件,不用改动。

现在的结论:是一个必须升级的版本!

delphi 各版本的特性的更多相关文章

  1. Delphi 各版本新特性功能网址收集

    Delphi XE2 三个新功能介绍举例_西西软件资讯  http://www.cr173.com/html/13179_1.html delphi 2007新功能简介-davidxueer-Chin ...

  2. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  3. Atitit mac os 版本 新特性 attilax大总结

    Atitit mac os 版本 新特性 attilax大总结 1. Macos概述1 2. 早期2 2.1. Macintosh OS (系统 1.0)  1984年2 2.2. Mac OS 7. ...

  4. IOS第三天-新浪微博 - 版本新特性,OAuth授权认证

    *********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...

  5. 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  6. zw.delphi不同版本程序运行速度测试

    { zw.delphi不同版本程序运行速度测试 delphi无论是开发,编译,还是运行,速度方面向来不差,笔者很少进行这种微粒度的优化,调试. 最近,因为项目需要,发现:同一个函数模块,差不多同样的代 ...

  7. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

    Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...

  8. 咏南中间件支持DELPHI低版本开发的两层程序平稳升级到三层

    提供DELPHI中间件及中间件集群,有意请联系. N年前,我们用DELPHI低版本开发的两层程序(比如工厂ERP系统),现在仍然在企业广泛地得到使用,但老系统有些跟不上企业的发展需要了.主要表现在:虽 ...

  9. [iOS微博项目 - 1.7] - 版本新特性

    A.版本新特性 1.需求 第一次使用新版本的时候,不直接进入app,而是展示新特性界面 github: https://github.com/hellovoidworld/HVWWeibo       ...

随机推荐

  1. 如何制作exe小程序

    1.构建maven项目 需要有一个main入口函数 添加M2_HOME及,java_home的环境变量 打开Preference->Java->Installed JREs->Edi ...

  2. Linux 驱动——Button驱动4(fasync)异步通知

    button_drv.c驱动文件: #include <linux/module.h>#include <linux/kernel.h>#include <linux/f ...

  3. ISAPI筛选器及对ASP源文件的保护

    ISAPI筛选器及对ASP源文件的保护 2009-04-21 01:45:57 标签:ISAPI 筛选器 ASP 源文件 保护 摘要:本文介绍了利用ISAPI筛选器保护ASP源文件的方法,并给出一个实 ...

  4. iview中,table组件在缩进时产生的bug。

    问题描述: 在父元素因为缩进的关系撑开时,table组件不会因为父元素的撑开而自适应,问题如图 解决办法:在父一级的组件中使用table {width: 100% !important},强制使表格宽 ...

  5. ELK简单安装测试

    1 介绍组件 Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读). Kafka是一种高吞 ...

  6. 20175120彭宇辰 《Java程序设计》第九周学习总结

    教材内容总结 一.mysql数据库管理系统(windows) 1.官网下载安装解压mysql社区版 2.启动mysql 用cmd进入mysql解压包,输入 mysqld --initialize-in ...

  7. vue中使用video插件vue-video-player

    一.安装插件 npm install vue-video-player --save 二.配置插件 在main.js中全局配置插件 import VideoPlayer from 'vue-video ...

  8. 关于java的scanner类

    java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 首先使用Scanner类时候需要导包: scanner类的基本语法: Scanner类 ...

  9. as 报错

    报错: cantnot find the declaration of element 'LinearLayout' 解决: 原本为了解决报错我把Android support关掉了,然后百度到解决办 ...

  10. vue列表拖拽组件 vue-dragging

    安装 $ npm install awe-dnd --save 应用 在main.js中,通过Vue.use导入插件 import VueDND from 'awe-dnd' Vue.use(VueD ...