問題: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 折行方式1:中英文混排折行(此種折行方式,才是跨所有平台都相同的折行方式) while (WordBeginIndex > LRun.StartIndex) and not (Text.Chars[WordBeginIndex - 1].GetUnicodeCategory in [TUnicodeCategory.ucSpaceSeparator, TUnicodeCategory.ucOtherLetter]) do 折行方式2:單字符折行 while (WordBeginIndex > LRun.StartIndex) do
中英文混排折行:未修正 | 中英文混排折行:修正后 | 單字符折行 |
![]() |
![]() |
![]() |
修正 2:修正顯示省略字符 2017/01/11
顯示省略字符:修正前 | 顯示省略字符:修正后 | 對照 Windows |
![]() |
![]() |
![]() |
修正 3:修正首字避開標點字符 2017/01/13
首字避開標點字符:修正前 | 首字避開標點字符:修正后 | 左括號,右引號允許在首字 右括號,右引號及其它標點不允許在首字 |
![]() |
![]() |
![]() |
由於改動地方較多,請下載后將 FMX.TextLayout.GPU.pas 復制到自己的工程目錄里即可。
修正下載: