文章

embarcadero 宣布推出 RAD Studio 12 Athens、Delphi 12 和 C++Builder 12。

 

主要变化

  • 将 Visual Assist 集成到 C++Builder 的 IDE,为 C++ 语言提供一流的代码补全、代码导航和重命名重构
  • 针对 Win64 的基于 Clang 的 C++ 编译器的显着更新预览,支持最新的 C++ 标准语言功能,并提供与外部库和 C++ 代码的更好集成
  • Delphi 添加新语法,包括多行字符串文字,以满足一些相关的客户端请求
  • 面向 FireMonkey 的 Skia 支持,通过为 FireMonkey 采用新基础,在所有目标平台上渲染图形和 UI 控件时提供更高的性能和质量
  • 为 VCL 重新设计的 MDI 和新的选项卡式 UI 架构,可帮助现有应用程序实现现代化视觉风格,用最少的改动为现有程序添加对 HighDPI 和样式的支持
  • 新的 FireDAC 示例查询 (QBE) 组件可简化数据过滤,新的 Delphi JSON 向导可将流行 JSON 格式的数据映射添加到对象,就像使用 XML 那样

 

The CompilerVersion constant identifies the internal version number of the Delphi compiler. It is defined in the System unit and may be referenced either in code just as any other constant:

if CompilerVersion = 20 then

   sCompilerName := 'Delphi 2009';

 

or in conditional compiler expressions:

 

{$if CompilerVersion > 18} // Delphi 2007 or later {$ifend}

 

 

Technical Comments

The CompilerVersion constant was introduced in Delphi 6 along with conditional expressions. In earlier Delphi versions various compiler defined VERxxx symbols are used to determine compiler versions.

 

CompilerVersion values and the equivalent compiler defined symbols for the Delphi versions in which the CompilerVersion constant is defined are:

CompilerCompilerVersion

Defined Symbol

Delphi 10.2 Tokyo 32 VER320
Delphi 10.1 Berlin 31 VER310
Delphi 10 Seattle 30 VER300
Delphi XE8 29 VER290
Delphi XE7 28 VER280
Delphi XE6 27 VER270
AppMethod 1 26.5 VER265
Delphi XE5 26 VER260
Delphi XE4 25 VER250
Delphi XE3 24 VER240
Delphi XE2 23 VER230
Delphi XE 22 VER220
Delphi 2010 21 VER210
Delphi 2009 20 VER200
Delphi 2007 .NET 19 VER190
Delphi 2007 18.5 VER185 (also VER180)
Delphi 2006 18 VER180
Delphi 2005 17 VER170
Delphi 8 .NET 16 VER160
Delphi 7 15 VER150
Delphi 6 14 VER140
Delphi 5 13(*) VER130
Delphi 4 12(*) VER120
Delphi 3 10(*) VER100
Delphi 2 9(*) VER90
Delphi 1 8(*) VER80

 

Delphi 10.2(Tokyo)出来一段时间了,最重要的新特性就是支持Linux的服务端。

 

官网有详细的介绍:

 

这里是主要的特性介绍:https://www.embarcadero.com/products/rad-studio/whats-new-in-10-2-tokyo

 

这里是详细的更新清单:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/What%27s_New

================翻译文开始==================

 

RAD Studio 10.2东京版本包含以下新功能和改进功能。

 

Linux

------------------------------

RAD Studio 10.2东京提供了对Delphi语言的Linux支持。编译器已启用ARC,仅支持服务器端应用程序;这包括控制台应用程序,WebBroker和DataSnap应用程序,以及RAD Server开发和部署的支持。应用程序还可以通过FireDAC访问数据。支持的Linux发行版是Ubuntu 16.04 LTS和RedHat Enterprise版本7.在RAD Studio 10.2东京的Linux支持在企业版及以上版本中可用。

Delphi Linux编译器

 

    64位Linux平台支持

    Delphi语言支持

    启用ARC

    1-based字符串

    基于LLVM引擎

 

支持的Linux发行版

 

RAD Studio 10.2东京支持以下Linux发行版:

 

    Ubuntu服务器(Ubuntu 16.04 LTS)

    RedHat Enterprise Linux(版本7)

 

支持RTL功能

 

    Linux文件系统访问

    线程和并行编程库支持

    内存管理

    HTTP和REST库支持HTTP调用

 

用于服务器应用程序的64位Linux

 

用于服务器应用程序的最新RAD Studio技术已获得64位Linux支持。

 

    FireDAC为所有支持Linux的DBMS提供Linux支持,唯一的例外是Informix。请参阅数据库连接。

    WebBroker,RAD服务器(EMS)和DataSnap支持多层服务器(独立和Apache模块)。

    DUnitX支持。

    PAServer支持。

    基于Indy的客户端和服务器支持。

 

FireMonkey

 

------------------------------------

iOS上的新系统状态栏选项

 

在TForm中添加了两个新的属性来更改iOS上的系统状态栏的行为:SystemStatusBar.BackgroundColor和SystemStatusBar.Visibility。

增强TMultiView

 

    使用“已启用”属性关闭与TMultiView的用户交互。

    管理TMultiView中边框外观的新选项。

    TMultiView中对接面板模式的底部和顶部对齐方式。

 

多线程支持TBitmap,TCanvas和TContext3D

 

    TBitmap:完成多线程支持。可以在任何线程中创建,销毁和修改,而无需同步。

    TCanvas:支持从多个线程一次使用,但内部是序列化的。

    TContext3D:支持从多个线程一次使用,但内部是串行化的

 

其他FireMonkey更改

 

    添加了对以下文本控件的ICaption的支持:TText,TStyleTextObject,TActiveStyleTextObject,TTabStyleTextObject和TButtonStyleTextObject。

    FMX对Windows的TWebBrowser的改进。

    TEdit中附加的CharCase属性。

    重新暴露的TStringGrid事件:

        OnCellClick

        OnCellDoubleClick

        OnDragDrop

        OnDragEnter

        OnDragLeave

        OnDragOver

        OnResized

    向TListViewItem添加了TagObject和TagString属性。

    Android上的Delphi和Java线程的统一:CallInUIThread已被弃用。所有代码现在都在Java UI Thread中运行,不需要线程同步。

 

    ProcessMessages方法用于调用CheckSynchronize方法,该方法从Java Native线程调用回调。以前有两个线程:Delphi UI线程和Java Native线程。 10.2中的重构工作之后,只有一个线程:Java Native线程,它接收来自Android的所有通知,并将它们转发到Delphi事件处理程序。当它通过while循环被阻塞时,不能执行任何事件处理程序,从而防止退出循环。如果没有代码保存应用程序主线程,则调用回调和事件。

 

    改进FMX.Platform.Android.pas通过增强FMX.Platform.Device.Android.pas,FMX.Platform.Logger.Android.pas,FMX.Platform.Metrics.Android.pas,FMX.Platform.SaveState.Android.pas ,FMX.Platform.Screen.Android.pas和FMX.Platform.Timer.Android.pas。

    TForm的Release方法已被弃用。

    Android上的ShowModal更改。

 

新的FireMonkey样式

 

为MacOS和Android添加了新的FireMonkey样式。访问FireMonkey样式:

 

    C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 19.0 \ Styles \ MacOS \ macOSgraphite.fsf

    C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 19.0 \ Styles \ Android \ AndroidWearDarkBlue.fsf

 

FireDAC和数据库

------------------------------

Firebird的改进

 

    New Direct属性添加对Direct I / O备份功能的支持。

 

MySQL的改进

 

    支持MySQL v 5.7。

    支持MariaDB v 5.5或更高版本。使用FireDAC的MySQL节点连接到MariaDB。

    与最近的MySQL版本5.6.x和5.7.x. Compatibilty

    MySQL准备语句API:现在支持旧的API(MySQL文本协议)和PS API(MySQL准备语句协议)。

        您可以使用TFDResourceOptions.DirectExecute属性选择所需的API。

        根据所使用的API,TFDCommand.CommandIntf.CliObj属性返回TMySQLStatement或TMySQLResult对象。

    支持内部BLOB流(仅限smOpenWrite模式)。

    改进了连接事务状态和TFDConnection.InTransaction属性的同步。此属性允许您确定连接事务当前是否正在进行中。

 

其他FireDAC更改

 

    TFDDataMove组件已从此版本中删除,不再适用于工具选项板。改用TFDBatchMove组件。

 

    注意:如果您需要TFDDataMove作为旧版项目,请使用FireDAC.Comp.DataMove.pas单元,可用于:

 

        开始|程序| Embarcadero RAD Studio 10.2东京|样品,然后导航到:

        对象Pascal \ Comp Layer \ TFDBatchMove \ DataMove_Deprecated

 

    TFDBatchMove已经优化。作为副作用,TFDBatchMoveMappingItem的DestValue和SourceValue属性不再可用。

    TFDMSAccessService现在支持Microsoft Access 2007或更高版本。

    增强TFDMemTable组件在设计时编辑TFDMemTable数据集。现在,TFDMemTable上下文菜单提供了Edit DataSet ...项目,允许您编辑组件数据并将其保存到表单中。数据在运行时可用。

 

    注意:在使用Edit DataSet ...之前,应该为数据集字段TFDMemTable.FieldDefs或创建持久字段指定字段定义。

 

数据库改进

 

    VCL TDBImage直接支持JPEG和PNG图形格式。

    支持BlobFields的显示选项。

    对TField类的直接GUID访问。

 

RTL

 

---------------------------------

HTTP客户端

 

HTTP客户端库提供对64位Linux的支持。

 

改进了HTTP客户端中的异步支持

RTL支持64位Linux

 

RAD Studio 10.2东京提供使用标准系统功能,流和IOUtils单元的Linux文件系统支持。它还为64位Linux提供标准RTL路径功能支持。

应用程序捆绑改进

 

应用程序绑定获得以下功能:

 

    用于TTetheringManager和TTetheringProfile的新SynchronizeEvents属性来控制与主线程的事件同步。因此,管理员和配置文件现在可以控制他们的事件处理程序是否在主线程上执行。

    改进了对日志过滤的支持:添加了更多的日志消息。

 

新的和改进的散列函数

 

System.Hash单元中的以下方法现在接受流或字符串作为输入参数:

    THashMD5.GetHashString

    THashMD5.GetHashBytes

    THASHSHA1.GetHashString

    。。

    THashSHA2.GetHashString

    THashSHA2.GetHashBytes

 

System.Hash单元具有以下新方法,可以从文件获取散列摘要:

    THashMD5.GetHashBytesFromFile

    THashMD5.GetHashStringFromFile

    。。。。。

    THashSHA1.GetHashStringFromFile

    THASHSHA2.GetHashBytesFromFile

    THashSHA2.GetHashStringFromFile

 

移动平台

------------------------------------

改进的移动的C ++包

RAD Studio 10.2东京静态地链接iOS和Android的C ++包。以前版本的RAD Studio生成了C ++包的扩展名为.so的文件,但实际上并不是动态库。 RAD Studio 10.2 Tokyo生成具有正确文件扩展名(.a)的C ++包。如果您静态链接到.so包,则可能需要更改以链接到新的文件名。

RAD服务器多租户支持

 

通过Multi-Tenancy支持,具有单个RAD Server数据库连接的单个RAD Server实例可以支持多个独立的租户。每个租户都有一套独特的RAD服务器资源,包括用户,组,安装,边缘模块和其他数据。所有租户都有安装在EMS服务器中的自定义资源。另外,作为管理员,您可以创建新的租户,编辑现有的租户,添加,编辑或删除租户的详细信息,指定租户是否处于活动状态,并删除不需要的租户。

 

C ++编译器

 

----------------------------------

更好地支持调试

 

在Clang增强编译器中:

 

    现在,使用Win32和Win64的Clang增强编译器构建的代码中的局部变量现在可以在手表或“本地变量”视图中进行评估。

    当代码在方法中的不同作用域中具有两个具有相同名称的局部变量时,变量评估现在可以解析并根据当前位置显示正确的变量。

    类名现在总是显示在调用堆栈中。

    (Clang-enhanced Win32)支持用于调试信息的外部类型文件,从而减少为许多编译单元(例如VCL类型)中使用的常见类型创建的调试信息的重复。这大大减少了构建时生成的调试信息的大小。

 

更好的代码

 

在Clang增强编译器中:

 

    -O1和-O2优化级别的代码已经得到改进,包括解决所有已知问题。

    新支持-O3。 Clang增强型Win32和Win64编译器支持-O3,这是一个强大的优化级别,可能会在一些情况下双重编译代码性能。

 

移动平台支持

 

    可以构建C ++ Android应用程序,无需NDK的特定版本。

 

链接器

 

    C ++链接器有很大的改进:

        改进资源处理来解决堆错误,包括内存不足,VIRDEF,dwarf_str等。

        链接器现在可以使用高达4GiB的内存;它不再局限于2GiB。

        链接器选项已被扩展,允许您为特定类型的调试或链接器数据设置资源分配大小。

 

        虽然大多数项目不是必需的,但这对于非常大的项目或者产生异常数量的链接数据的项目(包括调试信息)非常有用。如果发生链接器错误,可以通过将选项定制到项目的行为来解决。

 

异常处理

 

    对异常处理进行显着的质量改进,解决与内存泄漏有关的错误。

 

IDE

---------------------------------

    Delphi的代码洞察和代码完成现在正确地处理静态和动态数组。

    “查找文件”对话框适用于具有高DPI的屏幕。

    支持不同DPI的设计和开放形式得到改进。

    视图菜单已重新排列。已经将工具窗口(如对象检查器,结构,消息等)移动到现有Debug Windows子菜单下方的“工具Windows”子菜单中,并且新的“编辑器”子菜单包含编辑器上下文菜单中的多个编辑器操作和有用功能。已经移动了其他物品以保持相关物品相邻。

 

    工具Windows子菜单编辑器子菜单

    10.2查看工具Windows.png 10.2 View Editor.png

 

    项目管理器中的代码编辑器选项卡和文件的上下文菜单现在具有“在资源管理器中显示”菜单项,它将在资源管理器中显示文件的位置。

    项目的清单文件支持现在支持多个执行级别:作为Invoker,最高可用和需要管理员,还允许设置UI访问标志。

    即使网络负载较高或网络连接不足,IDE加载速度也应该很快。

    支持建设非常大型的项目组,如拥有一百多个项目的项目组,得到了改善。

 

调试器

 

 

iOS调试器

 

    完全支持iOS10调试(来自10.1柏林修复程序)

    完全支持iOS Simulator调试(来自10.1柏林修复程序) - 仅限Delphi。

    在iOS调试器中支持编写Delphi字符串值

    评估字符数组给出了预期的结果

    结束调试会话的错误(也在macOS上)被解决

 

macOS调试器

 

    完全支持macOS Sierra调试(来自10.1柏林修复程序)

    结束调试会话的错误(也在iOS上)被解决

 

Linux调试器

 

    支持在Linux上调试(仅适用于Delphi)

 

VCL

 

--------------------------------

高DPI修复

 

改进高DPI支持:

 

    现在,正确地调整窗体边界以响应WM_DPICHANGED消息,这意味着TForm.AutoScroll工作正常,以及表单的上/左位置

    当系统具有多个具有不同DPI的监视器时,窗体以正确的缩放因子打开

    TTabSheet和TPageControl,以及放置在标签页或页面控件上的控件

    ActionMainMenuBar将表单移动到具有不同DPI的显示器上时

    VCL菜单(主菜单和弹出菜单)现在可以在高DPI显示器上正确显示

    TStatusBar的高度在高DPI中保持正确

    消息对话框的图标现在可以正确缩放

    当使用不同DPI的显示器之间移动表单时,锚定的控件现在将保持在预期位置

    TCheckBox和TRadioButton正确绘制

    表单继承的几个问题,包括该控件现在使用正确的字体大小放置在面板上,ParentFont在继承的表单上设置为true,并且TListView列大小在继承的表单上保持不变。

 

其他改进

GetIt安装程序

 

    增强并行下载。

 

云(Cloud)

 

    通过更新的API改进了Azure和AWS支持。

 

编译器

 

    Delphi命令行编译器现在已启用大内存地址,允许您从命令行编译较大的应用程序(并在IDE中调用时将编译器的可用内存匹配)。

    假定动态数组是托管类型,涉及引用计数和相关的辅助函数生成,则不允许使用@运算符转换数组元素,因为它会导致内存损坏。在开发人员的责任下,仍然允许使用明确的转换操作执行类似的操作。

 

iOS 10模拟器,设备和macOS

 

    完全支持iOS 10,包括iOS 10 32位和64位在设备上的调试,模拟器支持(仅限Delphi)和macOS Sierra支持。


【C++】

1、新的 32 位基于 LLVM CLang 的 Win 32 编译器 BCC32C,可以在工程选项里修改使用旧的编译器还是新的。

2、更新 LLVM 和 CLang 到 3.3 版。

3、基于 CLang 的并行编译支持。

4、BCC32 和 OSX 编译器属性不支持 index 和 default 关键字。

5、一个新的 RTLVersionC 的常量用来等价于 Delphi 中的 RTLVersion。
【FireMoney】

1、支持 iOS 8.4 和 Android 5.1.1。

2、支持 OSX 的拖放操作。

3、新的 FireMonkey 样式(Win10样式)。

4、Tab 控件的 Tab 滚动支持。

5、移除了 TCalendar 的尺寸约束。

6、新的 GetFirstWeekday 函数。GetLocalFirstDayOfWeek 函数已被放弃。

7、FireMoney 的可视控件可以在鼠标移入时显示提示。

8、系统通知移动的 RTL 部分并支持 Windows。

9、样式呈现构造器接入数据模型和控件。

10、重构了列表视图(ListView)控件。

11、TStyledPresentationProxy 替换所有的代理样式呈现类,所有已存在的样式类已经移除:
XE8     Seattle
TStyledCalendarProxy
TStyledCalendarEditProxy
TStyledComboEditProxy
TStyledComboTrackBarProxy
TStyledEditProxy
TStyledEditBoxProxy
TStyledMemoProxy
TStyledOverlayLayoutProxy
TStyledShadowedLayoutProxy
TStyledNumberBoxProxy
TStyledScrollBoxProxy
TStyledSearchBoxProxy
TStyledSpinBoxProxy
TStyledSwitchProxy     TStyledPresentationProxy

12、 Android 触控动画支持

13、FireMoney 样式设计器增强

    可以在设计期为每个平台指定样式;
    每个控件的样式可以在设计期定制;
    在IDE中直接内置了新的位图链接编辑器,可以很方便的修改 TBitmapLink 属性;
    新的工具栏来保存、加载和清除 .style 文件;
    样式编辑时可以采用不同的背景;
    直接在样式设计器中选择和管理不同的样式布局对象和组件;
    工具面板双击增加新的控件到样式设计器。

14、其它 FireMonkey 变更

    现在你必需在使用之前显式转换 TListView.Selected 做为一个 Appearances.TListViewItem 类型;
    修改了FMX.consts.pas 中一些常量原来的拼写错误;
    TStyledCalendar 的保护成员 FDisableDayChange 已经被发布为 DisableDayChange 属性。同样,TStyledCalendar 发布了自己的一堆样式对象;
    其它的一些细节的一些调整就不翻译了

【VCL】

1、支持 Win 10 并增加了一些控件(TRelativePanel、TSplitView、TToggleSwitch、TActivityIndicator、TSearchBox);

2、现代化的选择目录对话框(SelectDirectory);

ModernizedSelectDirectory.png

 

3、新的 VCL 样式;

4、VCL 样式增强支持公用对话框和 TWebBrowser;

5、新的 TSharingContract 组件来分享信息给其它 Win 10 应用。
【RTL】

1、更多注册自己的应用程序来响应 Android 交互(Intents);

2、JSON 增强,开始支持 BSON;

3、HTTP 框架支持国际域名系统;

4、支持 SHA-2 哈希;

5、重构了 App Tethering 通讯框架;

6、异步运行远程动作;

7、TZipFile、TThreadPool等增强;
【IDE】

1、内存增强(IDE可以使用超过 4GB 内存了);

2、支持 Android 服务工程;

3、提升对多显示器支持;

4、集成 Castalia 支持;

5、自动恢复支持;

6、在代码编辑器中可以调整字体大小;

7、SVN 库更新到 1.8.13;

8、GetIt 增强;

9、重命名 OSX – Application Store Provisioning 页标签;

10、增强 iOS Provisioning 及发布方式;

11、新的 iOS 后台执行选项;

12、VCL 中增加新选项来支持高 DPI 应用;

13、对象观察器增强;

14、结构视图的图标换了;

15、Android 的 Manifest 文件中 InstallLocation 的默认值改了;

16、新选项允许在设计期隐藏非可视组件;

17、Tools API 增强(略);

18、增强对老版本项目导入的支持;
【数据库】

1、DataSnap 支持 FireDAC 数据集的压缩传输,并且不再需要 OpenSSL;增加新的示例;

2、FireDAC 的优化(细节略);

3、支持 NOSQL 的MongoDB 数据库;
【REST 客户端库和 BaaS】

1、TRESTRequestParameterList.AddItem 支持 arrays of Bytes 或流;

2、TCustomRESTRequest 加了一个新的只读属性 Body;

3、支持 JSON 的 Reader 和 Writer;
【云】

1、云 API 不再需要 OpenSSL;

2、SDK 更新到最新版本;

【调试】

1、远程 iOS 64 位设备调试支持;

2、增强 OSX 异常处理;

3、DUnitX 增加对移动平台支持;
【集成框架和SDK】

    Windows 10 SDK;
    Windows RT API;

【帮助】

帮助文件有更好的 README 文件说明。

function PE_DeletePrinterNow(pPrinterName: PChar):BOOL;
var hPrinter  : Cardinal; 
PrinterDef: PRINTER_DEFAULTS;

begin 
 Result := FALSE;
 FillChar(PrinterDef, sizeof(PrinterDef), #0);
 PrinterDef.DesiredAccess := PRINTER_ALL_ACCESS;
 if OpenPrinter(pPrinterName, hPrinter, @PrinterDef) then
     begin    
       if DeletePrinter(hPrinter) then Result := TRUE;
       ClosePrinter(hPrinter);  
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PE_DeletePrinterNow(pchar('MyPrinter 1'));
end;

end.