在我的国家,小数点分隔符是" , ".我的一个客户希望将其作为" . "字符.如何将小数点分隔符更改为" . "?
我试过这个:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DecimalSeparator := '.';
Application.UpdateFormatSettings := True;
end;
Run Code Online (Sandbox Code Playgroud)
但是这段代码只能帮助你.我在浮点字段中看到了" . ".但是,当用户按下数字键盘上的" . "键时,无论设置如何都会发送逗号.这是与网格无关的问题,我在表单上的KeyPress事件上检查了这个.
我正在使用Delphi 2007,感谢您的帮助.
首先,你应该设置UpdateFormatSettings
为false
!如果此属性为true,DecimalSeparator
则会不时地将其重置为Windows默认值(例如,每次锁定工作站(使用Win + L),然后再次将其解锁).默认值为true
,因此您需要将其设置为false
要覆盖的时间DecimalSeparator
.
其次,DecimalSeparator
当将浮点数格式化为字符串时(例如,使用FloatToStr
或时 FormatFloat
),Delphi例程使用它.要使数字小键盘上的小数点分隔符键产生一个point(.
)而不是OS默认字符(可能是.
或者,
),您可以处理该OnKeyPress
事件:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ',' then
Key := '.'
end;
Run Code Online (Sandbox Code Playgroud)
但要谨慎-这将取代所有 ,
以.
,即使是那些对键盘的字母部分逗号键插入.
更高级(和更安全)的方法是处理这样的OnKeyDown
事件:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
msg: TMsg;
begin
if Key = VK_DECIMAL then
begin
PeekMessage(msg, Edit1.Handle, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE);
SendMessage(Edit1.Handle, WM_CHAR, ord('.'), 0);
end;
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8623 次 |
最近记录: |