[修正] Firemonkey 中英文混排折行问题(只适用 Android & iOS 平台)

2017-01-11 19:30:38来源:cnblogs.com作者:龟山Aone人点击

问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题。

修正:这个修正适用在任何文字显示的函数及控件上,如:TText, TLabel, DrawText....等。

适用:Android & iOS 平台

修正 1: 中英文混排折行

请将源码 FMX.TextLayout.GPU.pas 复制到自己的工程目录里,再进行修改。
找到代码:
while (WordBeginIndex > LRun.StartIndex) and (Text.Chars[WordBeginIndex - 1].GetUnicodeCategory <> TUnicodeCategory.ucSpaceSeparator) do修改成如下(此种折行方式,才是跨所有平台都相同的折行方式):while (WordBeginIndex > LRun.StartIndex) and not (Text.Chars[WordBeginIndex - 1].GetUnicodeCategory in [TUnicodeCategory.ucSpaceSeparator, TUnicodeCategory.ucOtherLetter]) do

修正 2:单字符折行

请将源码 FMX.TextLayout.GPU.pas 复制到自己的工程目录里,再进行修改。
找到代码:while (WordBeginIndex > LRun.StartIndex) and (Text.Chars[WordBeginIndex - 1].GetUnicodeCategory <> TUnicodeCategory.ucSpaceSeparator) do单字符折行,修改成如下:while (WordBeginIndex > LRun.StartIndex) do // 单字符折行(只适用 Android & iOS 平台)
中英文混排折行:未修正中英文混排折行:修正后单字符折行

修正 3:修正显示省略字符 2017/01/11 

显示省略字符:修正前显示省略字符:修正后对照 Windows

修正 4:修正首字避开标点字符 2017/01/12(测试中,未公开)

首字避开标点字符:修正前首字避开标点字符:修正后

由于改动地方较多,请下载后将 FMX.TextLayout.GPU.pas 复制到自己的工程目录里即可。

此修正包含上面所有修正,下载:[修正]文字折行及省略符_Berlin10.1.2_Aone.zip

官方 QC:

https://quality.embarcadero.com/browse/RSP-16590

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台