Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

точка или запятая в десятичной дроби? [D6, XP]


ников ©   (2006-09-25 19:42:00) 

Cruel Masters!
Обычным разделителем в десятичной дроби теперь служит точка.
Однако, как вдруг выяснилось, некоторые пользователи меняют настройки в своем Windows с точки на запятую (им так удобнее что ли). Программа, естественно, при вводе в Edit немедленно вылетает. Конечно, не очень уж трудно, хотя и громоздко, написать обработчик этой ошибки, но такое решение "в лоб" как-то некрасиво. Но с другой стороны, этот разделитель, используемый Windows, -- это системная переменная, она где-то хранится и как-то называется. Не подскажет ли кто из гуру, где ее можно найти, тогда проверку можно будет организовать до StrToFloat. Или я хочу странного?


ников   (2006-09-27 12:37:00) [1]

to Barloggg & gdaujk
Идея с  чисткой и особенно с подменой точки-запятой на DecimalSeparator просто прелесть. Это решение проще, чем обработка ошибки ввода. Сделал, получилось. Правда, были трудности со значениями "по умолчанию", занесенными в Edit. Их пришлось считывать, исправлять, записывать обратно  и еще врать системе, что они не менялись. Смешно и непривычно теперь выглядят десятичные дроби на  "русифицированных" машинах, хотя это и какая-никакая подсказка пользователю -- как надо "правильно" вводить. (Хотя, если он и сделает "по-старому", то его подправят).


gdaujk   (2006-09-26 16:32:00) [2]


> Barloggg   (26.09.06 15:49) [5]


Процедура чистки - замечательный вариант. Только надо и точку и запятую заменять на DecimalSeparator...

strtoint? StrToFloat работает с

var CurrencyString: string;

var CurrencyFormat: Byte;
var NegCurrFormat: Byte;
var ThousandSeparator: Char;
var DecimalSeparator: Char;
var CurrencyDecimals: Byte;
var DateSeparator: Char;
var ShortDateFormat: string;
var LongDateFormat: string;
var TimeSeparator: Char;
var TimeAMString: string;
var TimePMString: string;
var ShortTimeFormat: string;
var LongTimeFormat: string;

var ShortMonthNames: array[1..12] of string;
var LongMonthNames: array[1..12] of string;
var ShortDayNames: array[1..7] of string;
var LongDayNames: array[1..7] of string;
var SysLocale: TSysLocale;
var EraNames: array[1..7] of string;
var EraYearOffsets: array[1..7] of Integer;
var TwoDigitYearCenturyWindow: Word = 50;

var ListSeparator: Char;


Barloggg   (2006-09-26 15:49:00) [3]

а я начхал.
сделал процедуру подчистки введенного в EditBox которая оставляет только первый минус, цифры и первую точку(запятую на лету превращает в точку).

а заодно избавляет от букв там где должно быть только число :)

а что, strtoint работает с региональными настройками? т.е. скомпилированная у меня программа бабахнет на других региональных настройках?


Zeqfreed   (2006-09-26 11:01:00) [4]

> [3] ников   (26.09.06 10:46)


> но у тебя комп наверняка настроен на точку, как и у большинства.

С какой, интересно, стати? В региональных настройках выбрана Российская Федерация и, соответственно, все настройки соответствуют региональному стандарту.


ников   (2006-09-26 10:46:00) [5]

To Ega23
Спасибо, друг. Действительно, все элементарно, после того, как известно имя.
To Zeqfreed
Про Comma Countries это конечно замечательно, но у тебя комп наверняка настроен на точку, как и у большинства.
Еще раз спасибо.


Zeqfreed   (2006-09-25 20:03:00) [6]

> Однако, как вдруг выяснилось, некоторые пользователи меняют
> настройки в своем Windows с точки на запятую (им так удобнее
> что ли)

http://en.wikipedia.org/wiki/Decimal_separator


Ega23   (2006-09-25 19:47:00) [7]

DecimalSeparator + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо