Другие языки программирования и технологии

Нужно заменить клавиши '.' на ',' на Delphi

Нужно учитывать, что на разных компьютерах это может быть не только запятая, но и точка.
Для этого служит системная константа DecimalSeparator.
Соответственно код для поля Edit можно представить вот так:


Но!
Это вовсе не паноцея от всех головных болей.
Т. к. при вводе числа должен быть всего один разделитель…
А вот про это на просторах интернета очень много написано!
К примеру: http://delphiworld.narod.ru/base/number_edit.html
$Хулиг@н$ Гы Гы Не Скажу
$Хулиг@н$ Гы Гы Не Скажу
77 174
Лучший ответ
Я так понимаю, это Вам для того, чтобы пользователь мог вводить вещественные числа? Подход понятен, но, по-моему, неверен. На самом деле никто не гарантирует, что разделителем целой и дробной частей в региональных настройках именно этого компьютера будет именно запятая. Кроме того, пользователь может работать одновременно с разными программами, которые будут требовать разные настройки, так что к единому знаменателю эти разделители привести окажется тяжело.

Я в свое время поступал примерно так. Сделал функцию, которая строку преобразует в число, а по выходу из соответствующего контрола прогонял через эту функцию пользовательский ввод:

USES SysUtils;

FUNCTION myStrToFloat (srcString :String) :Real;
VAR i :Integer;
BEGIN
srcString := trim(srcString);
FOR i := 1 TO Length(srcString) DO IF not(srcString[ i ] in ['0' .. '9','-']) THEN srcString[ i ] := ',';
DecimalSeparator := ',';
Result := StrToFloat(srcString);
END;

PROCEDURE Edit1Exit(Sender :TObject);
BEGIN
try Edit1.Text := FloatToStr(myStrToFloat(Edit1.Text)); except Edit1.Text := ''; end;
END;

Синтаксис за давностью лет не помню, но смысл, надеюсь, примерно понятен.
Асет Полатов
Асет Полатов
24 825