目录
以下逐步更新中(其中来自2群友和网友的部分,均有标注)......
序2、RAD Studio 10.4 Sydney官方教程:
序5、RAD Studio 10.4 Demos官方gitHub:
序6、RAD Studio 10.4应用案例的官方特色作者:
官方公布的“RAD Studio 10.4.1中修复的新功能和客户报告的问题”清单:
官方公布的“RAD Studio 10.4.2中修复的新功能和客户报告的问题”清单:
101、问:(2020-08-20)现在上架IOS,一定要用10.4吗?
102、问:(2020-08-20)用10.4新建一个新工程,在IOS上跑了一下,屏幕上form上下都有像是少了一节?!
2.002、关于D10.4.2的Android 64位发布结果
3.001、TabControl设置为透明 群友QQ: 448089110 提供
3.002、RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法
5.001、《RAD Studio 10.4.1 Sydney 新增与改进内容介绍》
5.002、2020-09-02:TWebBrowser.LoadFromStrings变了写法TEncoding, 默认ANSI ,radstudio_ 10 4 101461a.iso
5.003、2020-09-02:关于升级和打补丁,来自群:②FireMonkey[移动开发]老猫
5.007、DaataSnap原生服务端方法由其默认的客户端代理程序返回的UTF16编码的Json的乱码解决方法
5.008、IDE多线程Parnassus并行调试器插件:新增(2020-12-15免费发布):
从delphi 10.3到delphi 10.4的改变实务
以下逐步更新中(其中来自2群友和网友的部分,均有标注)......
序1、RAD Studio 10.3 Rio官方教程:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Getting_Started_with_RAD_Studio
序2、RAD Studio 10.4 Sydney官方教程:
http://docwiki.embarcadero.com/RADStudio/Sydney/en/10.4_Sydney_-_Release_1
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Tutorials
序3、RAD Studio官方精选博客:
https://community.idera.com/developer-tools/b/blog
序4、RAD Studio官方gitHub:
https://github.com/Embarcadero
序5、RAD Studio 10.4 Demos官方gitHub:
https://github.com/Embarcadero/RADStudio10.4Demos
序6、RAD Studio 10.4应用案例的官方特色作者:
阿塔纳斯·波波夫(Atanas Popov) https://blogs.embarcadero.com/author/atanas_popov/
大卫一世(MVP)David Millington https://blogs.embarcadero.com/author/davidi/
戴维·米林顿 https://blogs.embarcadero.com/author/davidmillington/
吉姆·麦基思Jim McKeeth https://blogs.embarcadero.com/author/jimm/
马可·坎图Marco Cantu https://blogs.embarcadero.com/author/marcocantu/
莎琳娜·杜邦Sarina DuPont https://blogs.embarcadero.com/author/sarinadupont/
斯蒂芬·鲍尔Stephen Ball https://blogs.embarcadero.com/author/stephenball/
技术合作伙伴Tech Partner https://blogs.embarcadero.com/category/tech-partner/
官方公布的“RAD Studio 10.4.1中修复的新功能和客户报告的问题”清单:
官方公布的“RAD Studio 10.4.2中修复的新功能和客户报告的问题”清单:
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Supported_Target_Platforms
第一篇 IOS篇
101、问:(2020-08-20)现在上架IOS,一定要用10.4吗?
答:新上架 : 必须 10.4,10.3.3得自己 手工去做 “故事版” 的 Asserts.car文件。10.3.3 手工做了 故事版 的 Asserts.car文件,也是 可以的,可参考:https://blog.csdn.net/pulledup/article/details/107100019
102、问:(2020-08-20)用10.4新建一个新工程,在IOS上跑了一下,屏幕上form上下都有像是少了一节?!
答:必须得有故事版:1、直接将10.3的工程搬过来,原info.plist.TemplateiOS.xml配置模板,需要将“故事版”条目加入:<%StoryboardInfoPListKey%>。2、新建工程,必须维护故事版的Icons,默认的图标只能用于调试和运行,是不符合上架要求的,用它们产生的故事版,只有背景色无图标。
第二篇 Android篇
2.001、10.4的Android真机64位调试安装不了
内核不对吧,显示OLDSDK :
2.002、关于D10.4.2的Android 64位发布结果
2.002.1、上图所示,编译时,所选择Target Platform为Android 64-bit且Configuration选Application Store时 ,发布出来的结果,是aab(上图中App Bundle格式,一种新的发布格式),而非apk,这取决于编译包额大小,大小超过150m的包都aab
详看官方文档:
https://developer.android.com/guide/app-bundle
Android 64位新规则:1、当包大于150M;2、当引入过多SDK造成包过大时
《关于aab转apk的方法--bundletool》https://blog.csdn.net/qq_22521145/article/details/102553053
《怎么从Android App Bundle (.aab)提取和转换apks文件(从AAB到APKs的转换和提取)》
https://blog.csdn.net/chichoxian/article/details/105570364?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control&dist_request_id=1328592.16597.16147919535052427&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control
《Android Jetpack之Android App Bundle》https://blog.csdn.net/weixin_37730482/article/details/83501586
《Delphi Android 64位支持》https://blog.marcocantu.com/blog/2019-delphi-android-64bit-rad-1033.html
编译时,所选择Target Platform为Android 64-bit ,但Configuration选Development而非Application Store时,发布出来的结果,仍然为apk。
编译时,所选择Target Platform为Android 32-bit ,发布出来的结果,为apk。
详请参考:《Delphi 10.4.2 Android 64位发布格式之App Bundle格式aab》https://blog.csdn.net/pulledup/article/details/114579951
第三篇 MSWindows篇
3.001、TabControl设置为透明 群友QQ: 448089110 提供
搞定TabControl设置为透明的问题:
窗口上放一个TRectangle:
object rtglStyleTransparent: TRectangle
StyleName = 'StyleTransparent'
Fill.Kind = None
Position.X = 402.000000000000000000
Position.Y = 286.000000000000000000
Size.Width = 50.000000000000000000
Size.Height = 50.000000000000000000
Size.PlatformDefault = False
Stroke.Kind = None
Visible = False
end
指定TabControl的StyleLookup为:StyleTransparent
(其中TabControl的TabPosition属性,我用的是None)
设置其他类型的控件透明,应该也可以用这种方式
3.002、RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法
https://blog.csdn.net/pulledup/article/details/109848546
https://blog.csdn.net/pulledup/article/details/109934357
3.003、使用 VCL 新用法 TImageCollection + TVirtualImageList
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Supporting_high-DPI_images_with_the_Image_Collection_and_Virtual_ImageList_components
TSpeedButton:
需要解决: VCL 图示运行时,会有红边?什么问题? -----------可以解决([龟山]Aone 提供):
前后对比:
如果背景是黑色的,就暴露了?!
不會, 它會自動變透明。正确的说,应该是原来红色边缘的部份,变成白色而已,只是看起来比较不奇怪。换个黑色外观,看起来还行:
这是以前的 VCL 程序,直接用 TImageCollection 可以把旧的 ImageList 转过来,图都是以前旧的 bmp。
上面那个是 TSpeedButton, 还有一个 TBitBtn 也要改:
3.004、使用D10.4 Demos下Win10通知
Object Pascal\VCL\Windows 10 Notifications\NotificationsProject.dproj
运行时没有任何反应,是因为你没有打开Win10操作系统的【通知服务】,打开方法:
用Win10的UI操作(需要管理员登录权限)
第四篇 MACOS篇
第五篇 通用篇
5.001、《RAD Studio 10.4.1 Sydney 新增与改进内容介绍》
https://blog.csdn.net/tanqth/article/details/108376731
5.002、2020-09-02:TWebBrowser.LoadFromStrings变了写法TEncoding, 默认ANSI ,radstudio_ 10 4 101461a.iso
来自群:②FireMonkey[移动开发]老猫
https://quality.embarcadero.com/browse/RSP-15686
如果 你们 认为 DELPHI 的 写法 太多余,希望 默认 UTF8,请 去 这个 帖子 用英语 回复。
叫他们继续改。
5.003、2020-09-02:关于升级和打补丁,来自群:②FireMonkey[移动开发]老猫
这 ISO 破解 和 BUG 修复,一起放出来。 明显 破解和 发布 是 同时的。
不要用 旧版本,特别是 需要打补丁的时候,不要忘了。小版本升级,一定要升级。否则 后果自负。
5.004、10.4.1支持的TPlatform
5.005、正确使用平台识别标签
{$IFDEF MSWindows}
//.......
{$ENDIF MSWindows}
{$IFDEF POSIX}
//POSIX开始,指除了MSWINDOWS以外的祖先基于Unix的所有平台:
//OSX开始:含与苹果相关的所有平台,在其中可以细分苹果平台识别标签的定义:
//IOS的代码开始:
{$IFDEF IOS}
//.......
{$ENDIF IOS}
//MACOS开始:
{$IFDEF MACOS}
//.......
{$ENDIF MACOS}
//...:其它与OSX相关的平台
{$IF Defined(LINUX) or Defined(ANDROID)}
//LINUX或ANDROID开始:含与LINUX或ANDROID相关的所有平台,在其中可以细分平台识别标签的定义:
{$IFDEF ANDROID}
//.......
{$ENDIF ANDROID}
{$IFDEF Linux}
//.......
{$ENDIF Linux}
{$ENDIF} //:LINUX或ANDROID结束
{$ENDIF POSIX} //:POSIX结束
/
//再如:
uses System.RTLConsts, System.Generics.Defaults, System.Math,
{$IF Defined(MSWINDOWS)}
System.Win.Devices
{$ELSEIF Defined(IOS)}
System.iOS.Devices
{$ELSEIF Defined(MACOS)}
System.Mac.Devices
{$ELSEIF Defined(ANDROID)}
System.Android.Devices
{$ELSEIF Defined(LINUX)}
System.Linux.Devices
{$ELSE}
{$MESSAGE FATAL 'System.Devices is not supported on this platform'} // do not localize
{$ENDIF}
;
5.006、正确使用匿名线程
//你可能会遇到典型的“线程”话题,现在是新世代的Delphi编程,不再是“D7年代”了,一定要养成随时随地想着使用线程的习惯...... :
function TAppIDAndUserAccount.setAppID(
const cnstr, ASql: string): Boolean;
var
LEvent:TEvent;//:信号灯:控制线程执行行为的局部变量;
LResult:Boolean; LResultInt:Integer; //:它们都可以作为线程的返回值,可简单的用来控制线程的执行行为,未正常或成功地执行完毕!
begin
LResultInt:=0;
LEvent :=TEvent.Create(true);
//:true:即:UseCOMWait(主要Windows下用,其它平台设置了也会对这个参数的传入置之不理):
//:指定UseCOMWait以确保在线程对象处于阻塞态时等待任何STA-COM都可以做回调到该线程
//:什么是STA-COM:1、在内存层面STA指,Spike-triggered average,译做“发放-触发平均方法”。表示传送地址指令。2、在进程层面STA指,Single-threaded apartment,单线程单元,是在WINDOWS系统中程序运行的一种方式。3、在芯片层面STA指,Static Timing Analysis,静态时序分析,是芯片设计中的一个后端流程,通常对设计的电路的时序路径进行分析,区别与动态逻辑分析。详见:https://baike.baidu.com/item/STA/4561221?fr=aladdin
TThread.CreateAnonymousThread(
procedure var LResultmsg:string;
begin
try
try
//在这里写线程执行函数的代码...:
//调sql:执行一条sql语句: //where条件like必须ltrim(rtrim(去空否则含有全角等查不出来:
if SQL(ASql,LResultmsg,nil,cnstr)=true then
begin
LResultInt:=1;
LResult :=true;
TThread.Synchronize(nil,
procedure //var LEtc:string; UI同步局部变量;
begin
//在这里写线程执行函数结束后与UI的交互...:
SJGY.ToastConfirm('已为您生成试用账号的AppID',(FOwner as TForm),2.5);
end);//:若不发出UI消息,是因为类未实例化其FOwner(constructor Create)
//Application.ProcessMessages;//:{$IFDEF CLR}用了线程同步就不必用它了;它通常对.net有意义(老版本delphi.net继承下来可用的)
end else
begin
LResult :=false;
LResultInt:=1;
//Application.ProcessMessages;//:{$IFDEF CLR}用了线程同步就不必用它了;它通常对.net有意义(老版本delphi.net继承下来可用的)//SJGY.ToastConfirm........
TThread.Synchronize(nil,
procedure //var LEtc:string; UI同步局部变量;
begin
//线程异常:在这里写与UI的交互...:
SJGY.ToastConfirm('代码异常或网络超时,发生在写数据库CarveoutAppID表CustomerAppID的过程中:'
+LResultmsg,(FOwner as TForm),2.5);
end);
LEvent.SetEvent;
LEvent.DisposeOf;
end;
except
LResultInt:=1;
LResult :=false;
//Application.ProcessMessages;//:{$IFDEF CLR}用了线程同步就不必用它了;它通常对.net有意义(老版本delphi.net继承下来可用的)//SJGY.ToastConfirm........
TThread.Synchronize(nil,
procedure //var LEtc:string; UI同步局部变量;
begin
//线程异常:在这里写与UI的交互...:
SJGY.ToastConfirm('线程异常或网络超时:发生在写数据库CarveoutAppID表CustomerAppID的过程中',(FOwner as TForm),2.5);
end);
LEvent.SetEvent;
LEvent.DisposeOf;
end;
finally
LResultInt:=1;
LResult :=true;
LEvent.SetEvent;
LEvent.DisposeOf;
end;
end).Start;
while LResultInt=0 do LEvent.ResetEvent;
//:无论线程是否执行成功或发生异常,都可LEvent.ResetEvent通过强制其返回值LResultInt:=1;
//:这是强制等待线程结束的方法,请根据具体使用场景合理使用......
Result:=LResult;
//:注意:LEvent.SetEvent仅仅通知UI线程执行函数的代码已经执行完毕,
//:但若是长耗时的线程,它可能并未结束和被释放,交由delphi的线程库来控制,//:操作系统本身并不直接管控用户态的线程,它只管控操作系统内核态的线程
//:也可交由被调用的窗体的Close事件Action := TCloseAction.caFree来释放
//:线程自己是不能释放自己的,只能通过UI组件的事件来释放(这跟线程常用的5个状态有关)
//:但是当长耗时的线程正在执行,你却强行释放它,则会内存泄漏:
//:所以,所有非主窗体Close事件都不要caFree,
//:把它留给主窗体Application组件来管理delphi的线程库,所有非主窗体的Owner设置为Application
end;
5.007、DaataSnap原生服务端方法由其默认的客户端代理程序返回的UTF16编码的Json的乱码解决方法
格式类似:
{"result":["{\"ServerCount\":2,\"Servers\":[{\"ServerName\":\"\u672C\u573014\u670D\",\"ServerIP\":\"172.16.228.14:8000\"},{\"ServerName\":\"\u7535\u4FE1\u6D4B\u8BD5\u670D\",\"ServerIP\":\"12.23.34.45:8000\"}]}\r\n"]}
5.008、IDE多线程Parnassus并行调试器插件:新增(2020-12-15免费发布):
https://blogs.embarcadero.com/new-ide-plugin-parnassus-parallel-debugger/
5.009、线程相关的改进-单列:
TParallel。适用于10.3(可能只有10.3.1) | RTL,RTL \ Delphi,RTL \ Delphi \线程 | RSP-23837 |
TThreadPool.ShouldGrowPool | RTL,RTL \ Delphi,RTL \ Delphi \线程 | RSP-20528 |
并行ITasks无法按预期启动 | RTL,RTL \ Delphi,RTL \ Delphi \线程 | RSP-16932 |
两次调用时在Android下的TThread.waitfor错误 | RTL,RTL \ Delphi,RTL \ Delphi \线程 | RSP-16356 |
TThreadedQueue和TMonitor问题,可能的解决方案 | RTL,RTL \ Delphi | RSB-4115 |
InterlockedCompareExchange128无法还原RBX | RTL,RTL \ Delphi | RSP-28272 |
TThreadedQueue.PopItem在压力下失败 | RTL,RTL \ Delphi | RSB-3951 |
线程化-IdleWorkerThreadCount的错误计算 | RTL,RTL \ Delphi | RSP-28200 |
TRttiContext.DropContext不是线程安全的。这会导致多线程应用程序中的错误,例如[ https://quality.embarcadero.com/browse/RSP-27769 | RTL,RTL \ Delphi | RSP-27771 |
TParallel产生带有“ nil”个成员的EAggregateException | RTL,RTL \ Delphi | RSP-24359 |
TThreadedQueue无法与大线程量一起使用-内存损坏 | RTL,RTL \ Delphi | RSP-23333 |
TThreadedQueue在PushItem和PopItem期间错误地超时 | RTL,RTL \ Delphi | RSP-21405 |
TThreadedQueue:应该等待INFINITE,但不要这样做 | RTL,RTL \ Delphi | RSP-19993 |
第六篇 综合篇
6.1、专题开发
6.1.001、《哪里不放您的Delphi组件》
《Windows中的ProgramData文件夹是什么?》
《程序在ProgramData中存储什么?》
《在ProgramData文件夹中有什么重要的备份吗?》
6.2、非官方推荐的开发资源
6.2.001、Delphi国内优秀网站及开源项目
第七篇 Linux篇
7.1、容器技术
Linux调试及分发容器: https://blogs.embarcadero.com/docker-scripts-and-dockerhub-images-for-rad-studio-10-4-1/
本博客相关:
《Delphi RAD Studio 10.4.2 Sydney的新增与改进介绍原版全文》
喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享: