gpt4 book ai didi

delphi - 如何更改 Delphi 应用程序中数字键的小数分隔符?

转载 作者:行者123 更新时间:2023-12-03 15:42:35 26 4
gpt4 key购买 nike

在我的国家/地区,小数点分隔符是“,”。我的一位客户希望将其设置为“.”字符。我应该如何将小数点分隔符更改为“.”?

我已经尝试过这个:

procedure TfrmMain.FormCreate(Sender: TObject);
begin
DecimalSeparator := '.';
Application.UpdateFormatSettings := True;
end;

但是这段代码只提供了部分帮助。我在 float 字段的网格中看到“.”。但是,当用户按数字键盘上的“.”键时,无论设置如何,都会发送逗号。这是与网格无关的问题,我已经在表单上的 KeyPress 事件上检查了这一点。

我使用的是Delphi 2007,感谢您的帮助。

最佳答案

首先,您应该将UpdateFormatSettings设置为false!如果此属性为 true,则 DecimalSeparator 将时不时地重置为 Windows 默认值(例如,每次锁定工作站(使用 Win+L)然后再次解锁时)。默认值为true,因此当您想要覆盖DecimalSeparator时,需要将其设置为false

其次,当将 float 格式化为字符串时(例如,当使用FloatToStrFormatFloat时),Delphi例程使用DecimalSeparator。要使数字键盘上的小数分隔符键结果为点 (.),而不是操作系统默认字符(可能是 .,),您可以处理 OnKeyPress 事件:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ',' then
Key := '.'
end;

但要小心 - 这会将所有 , 替换为 .,甚至是那些由键盘字母部分的逗号键插入的内容.

更高级(更安全)的方法是处理 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;

关于delphi - 如何更改 Delphi 应用程序中数字键的小数分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com