Delphi FMX TPaintBox Canvas.FillText在Windows 10上无法正常工作

Delphi FMX TPaintBox Canvas.FillText在Windows 10上无法正常工作,delphi,firemonkey,paint,Delphi,Firemonkey,Paint,我有一个带有fmx的多设备应用程序。在Form1上,只有一个名为pbox的TPaintBox。在PBoExpaint中,我画所有的画。有了位图,它的功能比exspected更好更快!(对游戏开发者来说是件好事,更多的广告将有助于启动旧的糟糕的工作解决方案)。但是对于Canvas.FillText,有几个错误 水平对齐是错误的。TTEXTALLIGN。前导将文本向右对齐,TTEXTALLIGN。尾随将文本向左对齐。中锋没问题。垂直定线工作正常 “你好,彼得·克洛!”显示为“!你好,彼得·克洛。这

我有一个带有fmx的多设备应用程序。在Form1上,只有一个名为pbox的TPaintBox。在PBoExpaint中,我画所有的画。有了位图,它的功能比exspected更好更快!(对游戏开发者来说是件好事,更多的广告将有助于启动旧的糟糕的工作解决方案)。但是对于Canvas.FillText,有几个错误

  • 水平对齐是错误的。TTEXTALLIGN。前导将文本向右对齐,TTEXTALLIGN。尾随将文本向左对齐。中锋没问题。垂直定线工作正常

  • “你好,彼得·克洛!”显示为“!你好,彼得·克洛。这太令人惊讶了!“!”先来,然后是课文的其余部分。也许我会理解它,当文本来像'!ßolK reteP olleH'。使用其他一些星座进行的几项测试: ABC!*->*!ABC | A.B.C->A.B.C | A.BC!0->A.BC!0

  • [TFillTextFlag.RightToLeft]是唯一可选择的标志。它有什么意义

  • 示例代码

    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Objects, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs;
    
    type
    
      TForm1 = class(TForm)
    
        pbox: TPaintBox;
        procedure FormCreate(Sender: TObject);
        procedure pboxPaint(Sender: TObject; Canvas: TCanvas);
    
    procedure TForm1.pboxPaint(Sender: TObject; Canvas: TCanvas);
    begin
          Canvas.Fill.Color := TAlphaColors.Red;
          mRect := TRectF.Create(form1.ClientRect);
          Canvas.FillText(mRect, 'Hello Peter Kloß!', false, 0.5,
            [TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Leading);
    end;
    
    环境

    德尔福社区版10.3.3

    视窗10

  • Fmx
    中,水平和垂直对齐以相同的常数运行,但以水平响应。垂直方向和水平对齐,同时考虑阅读顺序

    a。如果阅读顺序为
    []
    (意思是
    LeftToRight
    ),则水平对齐
    TTextAlign。前导
    表示文本放置在左边缘。如果水平对齐方式为
    TextAlign.training
    ,则文本放置在右边缘

    b。如果读取顺序为
    [TFillTextFlag.RightToLeft]
    ,则这些标志的含义相反

  • 当阅读顺序为RTL时,很明显,句子标点符号位于文本的左侧。然而,程序无法知道文本是RTL还是LTR

  • 唯一需要的读取顺序常量是[TFillTextFlag.RightToLeft],因为相反的顺序可以表示为
    []


  • 特别是第2点可以讨论,但堆栈溢出不是进行此类讨论的合适位置。

    您似乎启用了RightToLeft。去掉它,一切都应该如预期的那样。Canvas.FillText(mRect,“Hello Peter Kloß!”,false,0.5,[],TTextAlign.Center,TTextAlign.Leading);