【问题标题】:How to Correctly Fetch the Decimal Separator Character on Android如何在 Android 上正确获取小数分隔符
【发布时间】:2015-12-08 12:10:59
【问题描述】:

使用这样的旧方法很容易获取字符:

var
FS:TFormatSettings;
  begin
    FS:=TFormatSettings.Create;
...

记录成员FS.DecimalSeparator 将包含所需的Char。这种方法在我的 XE5 IDE 编译的 Win FMX 应用程序中运行良好。但是在寻找正确的方式来为 FireMonkey 中的角色提供正确的方法时,我读到了一些意见,认为这种方式是有害的,并且 deprecated。我还读到,更高版本的 Delphi 不支持此功能(我自己无法检查)。但是什么是正确和可靠的方法呢?尤其是如果希望代码能够迁移到 Android?

【问题讨论】:

  • 查看 TFormatSettings 代码,我只能看到针对 Windows、MacOS 和 Linux 的平台定义(是的,我对此感到很惊讶,因为您可能对此感到惊讶),但对 Android 却一无所知。所以我不知道这是否完全支持 Android 操作系统。
  • 作为操作系统的 Android 是否会向其应用程序公开此类信息?
  • @SilverWarior 感谢您对我的帖子的关注。是的。我也在挖掘 TFormatSettings 的代码。我有以下问题的背景。我正在编写一个TGrid 后代类,我希望它适合将来将我的主要项目代码迁移到 Android。某些列(单元格)需要输入控制。 Android 将显示一个屏幕键盘,其中包含由语言环境设置的小数分隔符按钮,但用户可以尝试输入该字符 >1 次。而且。字符串转换的浮点数(货币)也需要此数据。
  • @SilverWarior:如果你再仔细看一下,RTL 实际上有第四个初始化TFormatSettings 的实现——LIBICU 库。在SysUtils 单元的最顶部,为Android 定义了USE_LIBICU{$IFDEF ANDROID}{$DEFINE USE_LIBICU}{$ENDIF}
  • 谢谢@RemyLebeau。你曾经帮助人们提供出色的建议!我错过了指令。

标签: android delphi locale firemonkey delphi-xe5


【解决方案1】:

DecimalSeparator 全局变量以及所有其他与语言环境相关的全局变量已被弃用。它们现在已被删除。

访问此信息的新的受支持方式是通过TFormatSettings。因此,与您的问题相反,该类型并未被弃用。恰恰相反,这是获取语言环境信息的推荐方式。

var
  fs: TFormatSettings;
....
fs := TFormatSettings.Create;
// use fs.DecimalSeparator;

【讨论】:

  • 小错字:TFormatSettings.Create
  • @Edward 谢谢。我现在已经纠正了这一点。随意自己进行这样的编辑。它进入一个建议编辑的队列,如果被接受(本来会),您将获得代表。
  • 我会的,谢谢大卫。
猜你喜欢
  • 2018-12-16
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多