加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在Firemonkey中打印时,客户端的格式设置正在发生变化

发布时间:2020-12-15 09:23:02 所属栏目:大数据 来源:网络整理
导读:我有一个datasnap服务器和客户端.服务器系统的小数分隔符为“.”.我不知道我的客户会有什么,所以我在我的程序中更改它. FormatSettings.DecimalSeparator:='.';FormatSettings.ThousandSeparator:=' '; 现在,当我从客户端打印时,FormatSettings将恢复为Defau
我有一个datasnap服务器和客户端.服务器系统的小数分隔符为“.”.我不知道我的客户会有什么,所以我在我的程序中更改它.

FormatSettings.DecimalSeparator:='.';
FormatSettings.ThousandSeparator:=' ';

现在,当我从客户端打印时,FormatSettings将恢复为Default.

Printer.ActivePrinter.SelectDPI(600,600);
  //formatsettings.Decimalseperator is now ","

这是什么行为?这是一个错误吗?

奖金问:如何为客户端和服务器维护相同的格式设置?

解决方法

FormatSettings是全局变量.它可以在任何地方更改,并且所有使用它的代码都会受到影响.

使用TFormatSettings的正确方法是,不依赖于全局FormatSettings变量,并在进行格式化时使用自己的实例.这样你就可以确保一些超出你控制范围的代码不会改变它并弄乱你的格式.

此外,最好将固定格式设置用于存储目的,当您向用户显示数据时,您可以根据其区域设置使用格式设置,甚至更好地允许他们自定义将在您的区域设置中使用的格式设置.申请用于演示目的.

var
  MyFormat: TFormatSettings;

MyFormat := TFormatSettings.Create;
MyFormat.DecimalSeparator:='.';
MyFormat.ThousandSeparator:=' ';

然后在所有格式化函数中将它用作最后一个参数.

对于使用全局FormatSettings变量的函数,唯一可以确保格式化正确的方法是在调用格式化函数之前将全局FormatSettings变量设置为值,并在完成后恢复旧值.

只是为了记录StrToFloat确实有超载,你可以传递自己的设置.

function StrToFloat(const S: string; const AFormatSettings: TFormatSettings): Extended;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读