断线难题

时间:2019-09-21 17:29来源: 操作系统
问题: 使用 Canvas.DrawPath绘制时,最后一点无法画到终点位置。(这个问题要在粗线才能察觉) 升級到 Delphi 10.2 Tokyo 笔记: 适用:Delphi 10 Seattle for Android iOS 10.3 测试: macOS 没问题 iO

问题:使用 Canvas.DrawPath 绘制时,最后一点无法画到终点位置。(这个问题要在粗线才能察觉)

升級到 Delphi 10.2 Tokyo 笔记:

适用:Delphi 10 Seattle for Android & iOS

  • 更新 Xcode 8.3 & iOS 10.3 测试:
    • macOS 没问题
    • iOS Simulator 没问题
    • iOS Device 64 有问题,无法发布到真机:(相同环境,换回 Delphi 10.1.2 可以正常发布到真机,但不能生成 IPA,在官方未提供 HotFix 前,不要更新 Xcode 8.3)注:因为 Xcode 8.3 已取消xcrunPackageApplication 改用xcodebuild
      图片 1
    • 暂时解决方法:
  • 类型 TULargeInteger 需改用ULARGE_INTEGER
  • MapView 载图已支持(iOS & Android):
    • 不用改:FMX.Maps.Android.pas
    • 不用改:FMX.Maps.iOS.pas
  • Android 无法载入 GIF 问题已修正:
    • 不用改:FMX.Graphics.Android.pas
  • THTTPClient.BeginGet 回传类型改变:

    • // Delphi 10.1.2 Berlinvar HTTPResponse: IHTTPResponse;HTTPResponse:= HTTPClient1.BeginGet;// Delphi 10.2 Tokyovar AsyncResult: IAsyncResult;AsyncResult := HTTPClient1.BeginGet;
  • 已修正:
    左:Delphi 10.1.2 Berlin
    右:Delphi 10.2 Tokyo
    图片 2

  • Android 平台,启动已没有黑屏,之前使用的黑屏处理方法,可以不再需要使用了。
  • 线程绘图测试:Test Multi Thread Bitmap

    图片 3

  • 问题:FMX 使用 TPopup :

    • 放一个 TEdit,运行时点入这个 Edit 没有游标?
    • 放一个 TMemo.ReadOnly = True 会弹出键盘?
  • (ID: 30781 已修正)
    问题:TMessageManager.DefaultManager.SubscribeToMessage 没作用了?(实测只有 Android 平台有问题,其它平台没问题)
    • 按button1,并不会到test
      图片 4
    • 感谢 swish 提示,因为:Android 下 OnIdle 事件不会被正常触发造成的,可以自己调用下 WakeMainThread 就能触发一次 OnIdle
      图片 5
  • (ID: 30781已修正)
    问题:使用 AddObject 造成重影问题(移动平台 Android & iOS 才有问题,Windows & macOS 测试没问题)

    • 第一步: 使用 Rectangle1.AddObject(SubRectangle);
    • 第二步: 使用 Rectangle2.AddObject(SubRectangle);
    • 再反覆第一步,第二步,造成重影及卡顿?
    • 官方QC:
    • 图片 6
    • 测试工程:[测试]10.2_重影问题.zip
    • 修正方法:
      将FMX.Controls.pas 复制到自己的工程目录下,再修改如下:

      procedure TStyledControl.SetNewScene(AScene: IScene);var  OldScene: IScene;begin  OldScene := FScene;  inherited SetNewScene;  if not (csDestroying in ComponentState) and (OldScene <> AScene) and (not IsUpdating)  then{---> KillResourceLink; // 删除代码{+++>}NeedStyleLookup; // 加入代码:移动平台重影问题,改回 Delphi 10.1.2 Berlin 代码,暂时修正 by Aoneend;
      
    • 图片 7

  • 问题:如果修改官方源码 FMX.Types.pas 会造成无法编译 macOS 平台,错误如下:
    图片 8

  • (ID: 30781已修正)
    问题:TTabControl 加二页,第一页放 TText,第二页放 TColorPanel,真机运行后,点第二页,无法立即显示第二页内容,需要再点一下,才会显示。(Android 有问题 iOS 测试没问题)
    测试APK:[BUG]TabControl切页无法即时显示.apk
    测试工程:[BUG]TabControl切页无法即时显示.zip
    官方QC:
  • 问题:(Delphi 10.1.2 正常)
    场景一:在 TRectangle 里放一个 TButton(需要设置 ModalResult=mrOk),点 Button 后将 Rectangle 由主窗 RemoveObject 后出错
    场景二:如果一个 Frame 里有一个关闭按钮,按下后关闭(使用 Frame.Parent := nil; 或 RemoveObject)就会出错
    图片 9
    测试工程:[BUG]TestRemoveObjectScene.zip
    修正方法:关键问题是在ModalResult = mrOk,只要不设置 Button.ModalResult 就不会出错了(另外也可参考 10.1.2 的 FMX.Controls.pas 内 TControl.SetNewScene(AScene: IScene) 函数)
    官方QC:
  • (ID: 30781已修正)
    问题:Android 开启相簿,闪退?
    官方例子:
  • 问题:在 Linux 平台,uses System.Zip 会出错?
    图片 10官方QC:
    解决方案:安装 sudo apt-get install joe wget p7zip-full curl build-essential zlib1g-dev libcurl4-gnutls-dev
  • (ID: 30781已修正)
    问题:Android 平台使用 TControl.MakeScreenshot 若有文字,截图后,文字会变成黑块。
  • ...

修复方法:

参考:

请将源码 FMX.StrokeBuilder.pas复制到自己的工程目录里,再进行修改。

  • QDAC: Delphi 10.2 非官方补丁合集
procedure TStrokeBuilder.BuildSolidPolygon(const Points: TPolygon; const Opacity: Single; BreakAtEnd: Boolean);...略...  while CurIndex < Length do  begin    if (CurIndex >= Length - 1) and BreakAtEnd and (Points[0] <> Points[Length - 1]) then{--->删除这行 Break;}{+++>新增代码}    // 修复曲线最后一点断线的问题 by Aone (2016/03/25)    begin      PieceDirVec := (DestPos - SrcPos).Normalize;      ThickPerp := TPointF.Create(-PieceDirVec.Y, PieceDirVec.X) * FHalfThickness;      InsertVertex(DestPos - ThickPerp, FStrokeColor);      InsertVertex(DestPos + ThickPerp, FStrokeColor);      if PrevVerticesPlaced then      begin        InsertIndex(FCurrentVertex - 3);        InsertIndex(FCurrentVertex - 1);        InsertIndex(FCurrentVertex - 2);        InsertIndex(FCurrentVertex - 2);        InsertIndex(FCurrentVertex - 4);        InsertIndex(FCurrentVertex - 3);      end;      Break;    end;{<+++}...略...end;

效果:

图片 11

官方有人提交 QC 了:

RSP-14309: [iOS & Android] Delphi 10.1 Berlin - drawing problems

编辑: 操作系统 本文来源:断线难题

关键词: