【发布时间】:2011-02-14 12:16:51
【问题描述】:
我有一个应用程序,用户可以在其中设置值的显示方式。用户输入格式化字符串,组件使用 FormatFloat 显示值。
但是现在我们正在使用一个新的第三方组件,它使用 Format 函数格式化值,当然我们的用户格式都不能工作,因为 Format 和 FormatFloat 函数使用不同的语法。
那么有人知道在两者之间转换的方法吗?或者也许有人有代码可以做到这一点?
谢谢,
AJ
【问题讨论】:
标签: delphi
我有一个应用程序,用户可以在其中设置值的显示方式。用户输入格式化字符串,组件使用 FormatFloat 显示值。
但是现在我们正在使用一个新的第三方组件,它使用 Format 函数格式化值,当然我们的用户格式都不能工作,因为 Format 和 FormatFloat 函数使用不同的语法。
那么有人知道在两者之间转换的方法吗?或者也许有人有代码可以做到这一点?
谢谢,
AJ
【问题讨论】:
标签: delphi
虽然 FormatFloat 的格式字符串可以或多或少地转换为 Format 的格式字符串,但您可能只能获得正值的真正相似性。 Format 方法根本没有提供足够的灵活性来合并 FormatFloat 方法的格式字符串提供的功能和细粒度控制。
例如,FormatFloat 方法允许正值、负值和零值的三种不同格式。此外,FormatFloat 格式字符串允许字符串文字,例如'#,##0.00;;零'; (这意味着零值打印为“零”)。
要使用 Format 函数获得类似的结果,您需要自己完成 FormatFloat 通过格式字符串为您完成的所有繁重工作。
因此,虽然我反对更改第三方控件的源代码,就像我反对更改 vcl 源代码一样,但我同意 David 的观点:找到一种方法让第三方控件使用 FormatFloat 函数。最好通过自定义后代或通过插入器类(也称为拦截器类),但如果失败,请务必更改第三方控件的源。只需确保正确标记更改的部分,以便在切换到该控件的新版本时轻松重做。
【讨论】:
最简单的解决方案无疑是获取第 3 方组件的源(您应该只考虑使用源附带的第 3 方 Delphi 组件)并将其修改为调用 FormatFloat 而不是 Format。
【讨论】: