Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];

Вниз

Десятичный разделитель   Найти похожие ветки 

 
kta52   (2010-11-21 17:22) [0]

Здравствуйте! Подскажите пожалуйста, как программно получать информацию о том, какой десятичный разделитель действует на компьютере, используемом в данный момент?


 
Anatoly Podgoretsky ©   (2010-11-21 17:28) [1]

> kta52  (21.11.2010 17:22:00)  [0]

Переведи на английский десятичный разделитель


 
Palladin ©   (2010-11-21 17:31) [2]

52 это:
1  год рождения
2  возврастств
3  iq

?


 
Anatoly Podgoretsky ©   (2010-11-21 17:35) [3]

5.2


 
v_a_belousov   (2010-11-21 17:45) [4]


> ак программно получать информацию о том, какой десятичный
> разделитель действует на компьютере, используемом в данный
> момент?

DecimalSeparator в SySUtils


 
v_a_belousov   (2010-11-21 17:53) [5]

Изменить разделитель можно так

procedure SetDecimalSeparator( Ch: Char );
var
 DefLCID: LCID;
 Buffer: LPSTR;
begin
  Application.UpdateFormatSettings := true;
  StrPCopy( Buffer, Ch );
  DefLCID := GetThreadLocale;
  if SetLocaleInfo( DefLCID, LOCALE_SDECIMAL, Buffer ) then
     DecimalSeparator := StrPas( Buffer )[1];
  Application.UpdateFormatSettings := false;
end;

Например....

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetDecimalSeparator( "." );
end;


 
Юрий Зотов ©   (2010-11-21 18:42) [6]


> v_a_belousov   (21.11.10 17:53) [5]

Менять установки системы - не надо, юзер выставил их так, как надо ЕМУ.

А изменить разделитель внутри самой программы можно без всех этих ухищрений - простым присваиванием.


 
Anatoly Podgoretsky ©   (2010-11-21 18:47) [7]

> Юрий Зотов  (21.11.2010 18:42:06)  [6]

И изменять не требуется, большинство функций подерживают FormatSettings


 
kta52   (2010-11-21 18:55) [8]

v_a_belousov, спасибо, но мне нужно немного не это.
Если на компьютере
разделителем является точка, а введена запятая или
разделителем является запятая, а введена точка,
то надо, чтобы программа сразу писала в stringGrid правильный разделитель


 
clickmaker ©   (2010-11-21 19:51) [9]

> разделителем является точка, а введена запятая или
> разделителем является запятая, а введена точка

StringReplace(StringReplace(S, ",", DecimalSeparator), ".", DecimalSeparator)


 
kta52   (2010-11-21 20:12) [10]

спасибо


 
Германн ©   (2010-11-22 02:08) [11]


> v_a_belousov   (21.11.10 17:53) [5]
>
> Изменить разделитель можно так
>
>

Никогда так не нужно делать.


 
Inovet ©   (2010-11-22 04:19) [12]

> [2] Palladin ©   (21.11.10 17:31)
> 52 это:
> 1  год рождения
> 2  возврастств
> 3  iq

4. Коэффициент теплового апокалипсиса.

> [8] kta52   (21.11.10 18:55)
> Если на компьютере
> разделителем является точка, а введена запятая или
> разделителем является запятая, а введена точка,
> то надо, чтобы программа сразу писала в stringGrid правильный разделитель

Числа надо хранить как числа, выводить в интерфейсе пользователя в соответсвии с настройками системы, вводить тоже в соответсвии. Не будет путаницы и неразберихи. Как в Ексел, например, делается?


 
Anatoly Podgoretsky ©   (2010-11-22 08:48) [13]

> Inovet  (22.11.2010 04:19:12)  [12]

stringGrid хранит только строки.


 
DiamondShark ©   (2010-11-22 13:17) [14]


> Числа надо хранить как числа, выводить в интерфейсе пользователя
> в соответсвии с настройками системы, вводить тоже в соответсвии.

Вот есть такая кнопочка на нумпаде. С точечкой.
В разных раскладках клавиатуры она вводит разный символ.


> Как в Ексел, например, делается?

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


 
Anatoly Podgoretsky ©   (2010-11-22 13:42) [15]

> DiamondShark  (22.11.2010 13:17:14)  [14]

А должны вводиться ,. в зависимости от языка, это стандартное поведение
системы.


 
DiamondShark ©   (2010-11-22 15:38) [16]


> Anatoly Podgoretsky ©   (22.11.10 13:42) [15]

Тут вот какое дело.
Есть несколько сущностей:
- Локаль системы
- Локаль приложения (точнее, текущая локаль уишного потока)
- Пользовательские перекрытия системной/текущей локали
- текущий язык ввода
- текущая раскладка клавиатуры

Это всё хозяйство друг от друга не зависит и может быть, вообще говоря, установлено во все возможные сочетания.

Теперь вопрос:
- Системная локаль EN-US
- текущая локаль RU-RU
- Пользователь перекрыл настройки десятичного разделителя на символ "="
- текущий язык ввода -- Мумбо-Юмбо, в этом языке десятичный разделитель символ "@"
- текущая раскладка клавиатуры Мумбо-Юмбо-Клинопись, в которой цифровая клавиша с точкой транслируется в символ "<".

Какой символ должен появиться в поле ввода при нажатии на цифровую клавишу "точка"?

Символы "," и "." являются, как легко заметить, являются наименее адекватным вариантом.
Более того, адекватный вариант вообще невозможно выбрать БЕЗ УЧЁТА ЛОГИКИ ПРИЛОЖЕНИЯ.

Самый адекватный вариант такой:
- Если поле ввода подразумевает ввод числовых данных, то вводиться должен числовой разделитель, определяемый текущей модифицированной локалью. Т.е., в нашем случае, символ "="
- Если поле ввода подразумевает ввод произвольного текста, то вводиться должен символ текущей клавиатурной раскладки. Т.е., в нашем случае, символ "<"


 
Inovet ©   (2010-11-22 15:42) [17]

> [13] Anatoly Podgoretsky ©   (22.11.10 08:48)
> stringGrid хранит только строки.

> [8] kta52   (21.11.10 18:55)
> надо, чтобы программа сразу писала в stringGrid правильный разделитель

Хранить не StringGrid.


 
Anatoly Podgoretsky ©   (2010-11-22 15:50) [18]

> DiamondShark  (22.11.2010 15:38:16)  [16]

Текущая локаль, именно так это работает в системе и я не ожидаю другого
поведения в других программах.


 
Inovet ©   (2010-11-22 15:52) [19]

> [14] DiamondShark ©   (22.11.10 13:17)
> Точечка с нумпада преобразуется в десятичный разделитель.

Ну вот, она в момент ввода отлавливается, а пользователь видит то, что в системе выставлено. С реплейсом же будет вводить точку, а она превратится в запятую, А если ещё автор сохранит это всё как текст и откроет на другой машине с другим разделителем в настройках.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1288645960
Delphi6
2010-11-02 00:12
2011.02.13
простой HTTP снифер


15-1288709198
Andy BitOff
2010-11-02 17:46
2011.02.13
Photoshop в СССР


2-1290596992
FIL-23
2010-11-24 14:09
2011.02.13
firebird и delfi


2-1290450696
АЛЬБИНА
2010-11-22 21:31
2011.02.13
помогите пожалуйста


2-1290582165
Yourlastmist
2010-11-24 10:02
2011.02.13
Экспорт книги Excel в BLOB поле БД и обратно





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский