delphi 各新版本特性收集(转)
Delphi XE5中的新增内容
Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的、多设备应用开发解决方案的最新版本。使用Delphi XE5的新特性,以交付应用Android、 iOS、Windows 和OS X。以PC机、平板电脑和智能手机为目标,更轻松地与更多数据连接 - 等等!
Delphi XE5中的新特性
- 针对设备和仿真器的 Delphi Android ARM编译器
- 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 应用。
- iOS 7 SDK 支持和样式
- 针对Android、iOS、Windows和OS X 的时间选择器控件
- 针对Android、iOS和OS X 的通知中心组件
- Android、iOS、Windows和OS X 上内置搜索过滤可用于 TListView
- 在Android和iOS 上滑动屏幕就可以删除
- 在Android和iOS上共享工作表支持
- FM 平台性能优化
- 针对Android 的Delphi RTL
- 针对Android 的部署管理器
- 部署应用到针对Ice Cream Sandwich 和Jelly Bean 的仿真器
- 部署应用到Android 设备(调试 / 应用商店)
- 针对Android 的远程调试
- 专业版包括对本地数据库的扩展 FireDAC支持,包括Microsoft Access数据库、SQLite数据库、InterBase ToGo / IBLite、本机上的InterBase、 MySQL Embedded、本机上的MySQL Server、Advantage Database本地引擎、本机上的PostgreSQL、Firebird Embedded、以及本机上的Firebird
- IBLite 嵌入式数据库可用于Android 和iOS,带有自由不受限的部署许可证
- REST 客户端函数库用于简化 REST 服务的调用
- 授权支持,包括基本的身份认证、计划身份认证、OAuth1、OAuth2
- TRestClient、TRestRequest、和TRestResponse 组件
- REST 调试器工具用于测试 REST 调用及其参数
- 部署管理器中的多重选择
- IDE 内视现在可作为 IDE右上角中一个搜索框使用
- 设备管理器可以管理并选择 FM 移动窗体设计器中的缺省设备
… 等等!
* 已支持 Android 设备的列表
Delphi XE4 |
|
Delphi XE3 |
|
Delphi XE2 |
|
Delphi XE |
|
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的新变化的同时都没有介绍这个特征.
贴一段代码:
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- 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;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
呵呵.很有意思.虽然以前用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只能这样写.
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- 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;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
或者非要用下标访问的话就要变通一下.
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- 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;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
但是Delphi2009新增了编译开关,允许象C语言一样用下标直接访问数组所指向的元素.
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- {$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;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
呵呵方便多了.
不过要注意默认是{$POINTERMATH OFF}的.
目前多数Delphi2009新特性的介绍
2008年09月16日 星期二 10:43
集中在Unicode,以及一些新的URL上,我试图从一些不同的角度察看一下Delphi2009都有些什么东西. IDE:粗看起来Delphi2009的IDE较之Delphi2007并没有什么特别的增强。主要的UI元素也没有大的变化。最显著的变化就是Project Manager和Tool Palette。 RTL: 同 个 另外在使用过程中我注意到Editor中的ErrorInsight问题还是很多,如TDictionary中的GetItem()方法就不会被Editor正确的识别。可能CodeGear的人手确实还不是很足。 不管怎么说Unicode是Delphi欠了太多年的东西了,而Generics虽然来得晚了些,毕竟终于是来了。直接进行算术运算的指针功能提供了object pascal能够进行更好的低阶编成的能力。 首先我们看到了Tubron的增强,客观的讲,内部的改进确实还是挺大的,尤其是在CodeGear人手并不是很整齐的情况下,之前觉得遗憾的地方的意思就是说Delphi在外围的变化并没有跟上其内部的改进速度。 下面再看下Delphi2009在语言方面的增强 3)for p.s.System中还多了IEquatable,IComparable等接口,这方面看来也是学习了Java中的一些设计理念,很不错 :) Thread: 刚才上面有朋友说起VCL库,其实我们还是不要轻易说 至少想上去还是不错的 不是么 :) 我个人认为Delphi2007是自Delphi7以来第一个可用版本,而Delphi2009将是自Delphi7以来真正有实质进步的版本,的确值得期待。 这 大概我们的程序里面也会多出诸如 另外八卦下,Delphi2009并行计算这部分的设计和实现都是allen bauer亲自操刀的。 最 ![]() ![]()
![]() ![]() 最后就是反射Reflection,很遗憾,Tiburon没有为我们带来完整的反射API,但是,这里面有个玄机,就是估计是作DataSnap的steve的需求吧,现在有一个叫 最后,Delphi2009真的给我们带来了不少好东西,Delphi2009是个真正值得期待的版本,OK,一起期待吧。 :) |
delphi2006语言新特性
内嵌类
内嵌类在类的内部声明,它被大量的应用在.net framework以及面向对象的编程中,它表明一种概念性关联关系,并且避免了命名冲突,它同样支持delphi win32编译。
定义内嵌类
它使用如下语句定义
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- type
- className = class [abstract | sealed] (ancestorType)
- memberList
- type
- nestedTypeDeclaration
- memberList
- end;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
当内嵌类定义遇到第一个非标识符时终止,例如:procedure, class, type和所有可见性范围修饰符。内嵌类与容器类同样适用正常的访问、可见性规则。一个内嵌类能存取它的容器类实例的变量(如字段,属性或者方法),但是 它必须要有一个参考对象。一个内嵌类能存取类静态字段(class fields)类属性(class properties)和类静态方法(class static methods)且不用参考对象,但必须遵守delphi可见性规则。
内嵌类不增加容器类的大小,建立一个容器类实例时不会同时建立内嵌类的实例,内嵌类与容器类仅仅是定义的上下文关系。
定义和使用内嵌类
下面的例子演示如何去定义和存取内嵌类的字段和方法。
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- type
- TOuterClass = class
- strict private
- myField: Integer;
- public
- type
- TInnerClass = class
- public
- myInnerField: Integer;
- procedure innerProc;
- end;
- procedure outerProc;
- end;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
在实现内嵌类的innerProc方法时,你必须指定它的容器类的名字,例如:
- procedure TOuterClass.TInnerClass.innerProc;
- begin
- ...
- end;
可以用 . 标志像存取一般的类成员一样去存取嵌套类的成员。例如:
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- var
- x: TOuterClass;
- y: TOuterClass.TInnerClass;
- begin
- x := TOuterClass.Create;
- x.outerProc;
- ...
- y := TOuterClass.TInnerClass.Create;
- y.innerProc;
- end;
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
内嵌常数
常数也可以同样在内嵌类型块中声明,常数块的结束标志与内嵌类块的结束标志一样,关键字或
可见性修饰符。内嵌常数不支持类型常量,如 Borland.Delphi.System.Currency
或Borland.Delphi.System.TDateTime 。它只支持简单类型,如:序数,枚举,字符串,实数等类型。
下面的代码演示声明内嵌常量
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- 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.
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
delphi2006语言新特性-帮助类
帮助类(Class Helpers)
帮助类是联合其它类的一种类型,它能为联合类(包括它的派生类)增加方法
和过程。它为我们提供了一种不使用inheritance来扩展一个类的能力,你可以在任何地方使用帮助类,编译器自动决定在什么时候使用原始类还是增加
的帮助类。(注意:帮助类只是一种扩展一个类的方法,但是应该仅仅在为实现某种新目的而开发新代码时被使用,而不应该视为一个设计工具被使用。它是绑定语
言和平台RTL的 )
定义一个帮助类的语法:
- type
- identifierName = class helper [(ancestor list)] for classTypeIdentifierName
- memberList
- end;
ancestor list是可选的
一个帮助类不可以定义实例数据,但允许有类字段(class fields)
可见性规则与memberList语法与一般的类一样
一个简单类可定义并联合多个帮助类,然而,只有一个在源代码中特殊位置的帮助类才能被应用。在最近的范围被定义了的帮助类将应用。帮助类的范围是由delphi风格决定的(在单元中uses子句,由右到左)
(呵呵,上面这段翻译的好像不太准,暂且这样吧,欢迎指正)
下面演示定义一个帮助类:
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
- 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
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
![](https://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2NvbW1vbi5jbmJsb2dzLmNvbS9pbWFnZXMvY29weWNvZGUuZ2lm.jpg)
注意,帮助类的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
这个版本与上周官方发布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的控件,不用改动。
现在的结论:是一个必须升级的版本!
转自:https://www.bbsmax.com/A/ke5jRKBg5r/