在我的国家/地区,小数点分隔符为“,”。我的一位客户希望将其作为“。”字符。如何将小数点分隔符更改为“。”?
我试过这个:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DecimalSeparator := '.';
Application.UpdateFormatSettings := True;
end;
但是这段代码只能帮助你。我在浮点字段中看到了“。”。但是,当用户按下数字键盘上的“。”键时,无论设置如何都会发送逗号。 这是与网格无关的问题,我在表单上的KeyPress事件上检查了这个。
我正在使用Delphi 2007,感谢您的帮助。
答案 0 :(得分:9)
首先,您应该将UpdateFormatSettings
设置为false
!如果此属性为true,则DecimalSeparator
将不时地重置为Windows默认值(例如,每次锁定工作站(使用Win + L),然后再次将其解锁)。默认值为true
,因此当您要覆盖false
时,需要将其设置为DecimalSeparator
。
其次,在将浮点数格式化为字符串时(例如,使用DecimalSeparator
或FloatToStr
时),Delphi例程使用FormatFloat
。要使数字小键盘上的小数分隔符键产生一个点(.
)而不是操作系统默认字符(可能是.
或,
),您可以处理{ {1}}事件:
OnKeyPress
但要小心 - 这会将{strong>所有 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ',' then
Key := '.'
end;
替换为,
,甚至是用键盘字母部分的逗号键插入的那些。
更高级(更安全)的方法是处理.
事件,如下所示:
OnKeyDown
答案 1 :(得分:1)
此键映射到的char不是由Delphi确定的,而是由Windows中设置的键盘布局决定的。
一个黑客只是简单地替换。在OnKeyPress处理程序中。
否则你需要以某种方式修改KeyDown / Up消息的翻译到按键消息,但我不知道该怎么做。
从虚拟键到字符的转换发生在TranslateMessage http://msdn.microsoft.com/en-us/library/ms644955(VS.85).aspx中
因此,您可以事先检查传入TranslateMessage的消息,检查它是否是numpad上的虚拟十进制密钥,然后传入另一个虚拟密钥。但你能做的一切都是非常黑的。