Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2014, 12:40   #1
СтарыйХрыч
 
Регистрация: 29.09.2014
Сообщений: 9
По умолчанию Изменить системный (Win7) разделитель целой и дробной части чисел из приложения под Delphi

Кто в курсе, как из Delphi-приложения узнать, какой системный разделитель целой и дробной части чисел установлен в Windows 7 и заменить в Винде запятую на точку на время работы приложения?
Или хотя бы где это следует искать?
СтарыйХрыч вне форума Ответить с цитированием
Старый 29.09.2014, 13:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

FormatSettings.DecimalSeparator по идее должно подхватывать разделитель из системы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2014, 13:57   #3
СтарыйХрыч
 
Регистрация: 29.09.2014
Сообщений: 9
По умолчанию

FormatSettings.DecimalSeparator действительно считывает в Char системный разделитель. Но я рано радовался. Если я присваиваю в FormatSettings.DecimalSeparator:='. ', то точка присваивается, но система не начинает использовать точку, как системный разделитель. В процессе работы приложения
останавливаю его на контрольной точке, значение FormatSettings.DecimalSeparator - точка, а в системе в Панели управления=>Региональных стандартах=>Настройках разделитель остается запятой.
Видимо, нужно ещё какое-то ругательство, чтобы изменение было воспринято.
На это ответ есть?
СтарыйХрыч вне форума Ответить с цитированием
Старый 29.09.2014, 14:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Т.е. ты хочешь закатать новый разделитель для всех приложений на момент запуска твоего?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2014, 14:41   #5
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от СтарыйХрыч Посмотреть сообщение
Видимо, нужно ещё какое-то ругательство, чтобы изменение было воспринято.
Вам нужно изменить разделитель для всех программ или только для Вашей?
Если для всех (чтобы в
Цитата:
Сообщение от СтарыйХрыч Посмотреть сообщение
Панели управления=>Региональных стандартах=>Настройках
), то можно использовать реестр.
Если речь идёт только о Вашей программе, советую просто программно заменять запятую на точку. Это избавит Вас от многих трудностей, которые неизбежно возникнут при работе с реестром.
Streletz вне форума Ответить с цитированием
Старый 29.09.2014, 15:23   #6
СтарыйХрыч
 
Регистрация: 29.09.2014
Сообщений: 9
По умолчанию

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

Успокаивает одно. Комп можно использовать в монопольном режиме.

Так куда надо залезать в реестре и какую литературу искать ?
СтарыйХрыч вне форума Ответить с цитированием
Старый 29.09.2014, 15:40   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от СтарыйХрыч Посмотреть сообщение
Так куда надо залезать в реестре
Ссылка есть моём предыдущем посте.
Цитата:
Сообщение от СтарыйХрыч Посмотреть сообщение
какую литературу искать ?
По реестру (и всему, что с ним связано, включая права доступа) и по Delphi. В том числе по обработке "нештатных ситуаций" наподобие исключений и т.д.. Дело в том, что если Ваша программа отработает не корректно до того момента, когда восстанавливается прежнее значение разделителя, то в системе так и останется точка вместо запятой. Что не есть хорошо.
Поэтому, Вам необходимо предусмотреть вариант восстановления первоначального значения разделителя в случае не корректной работы программы.
В общем путь тоже не из лёгких.
Цитата:
Сообщение от СтарыйХрыч Посмотреть сообщение
Их каждый раз конвертировать посинеешь.
А, если попробовать выполнять конверсию "на лету"?

Последний раз редактировалось Streletz; 29.09.2014 в 15:43.
Streletz вне форума Ответить с цитированием
Старый 29.09.2014, 15:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мдя... Ну и задачка...
Это я так понимаю - тупость проггеров, которые писали прогу, требующую обязательно один разделитель в системе в то время как в той же системе работает другая такая же но требующая другой разделитель?

Да, а что будет если ты разделитель поменяешь, а та прога его не подтянет? м.б. она только при старте его определяет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2014, 15:48   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Сейчас приходится перед запуском программы на чужом компе вручную менять разделитель в настройках системы
чтобы МОЯ программа могла переводить числа в соответствии с МОИМИ настройками.

Цитата:
А обрабатываю получаемых текстовых данных с разделителем-точкой за один сеанс сотни мегабайт. Их каждый раз конвертировать посинеешь.
Delphi7 F1
Цитата:
Код:
function StrToFloat(const S: string): Extended; overload;
function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload;
Используйте второй вариант.

Код:
var f: TFormatSettings;
  GetLocaleFormatSettings(0; f);
  f.DecimalSeparator:='.';
  x:=StrtoFloat('4.9', f);
и никакого реестра не потребуется.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.09.2014, 16:24   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Надо изменить системно, да?
Всё настолько просто, что даже не интересно.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить разделитель целой и дробной части в системе ольгаг Общие вопросы .NET 1 18.03.2014 13:38
Разделитель целой и дробной части IgorGO Microsoft Office Excel 3 25.11.2012 11:08
Присвоить целой переменой К первую цифру из дробной части. Delphi Dilex Помощь студентам 4 14.01.2012 03:19
Разделитель целой и дробной части. gusluk Общие вопросы Delphi 2 12.11.2008 08:45
Разделитель целой и дробной части neugadal Microsoft Office Excel 3 09.10.2008 07:20