Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 505

/ вопрос открыт /

Приветствую, уважаемые эксперты! Как правильно програмно изменить региональные настройки Win7 и XP, при открытии главной формы. Необходимо заменить разделитель с запятой на точку? Цель одна, чтобы при работе с программой разделитель был точкой, а при выходе из программы разделитель - запятая. Заранее спасибо.

Яковлев Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Яковлев (статус: Посетитель)
Вопрос отправлен: 15 июля 2011, 07:16
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Есть в модуле SysUtils глобальная переменная DecimalSeparator: Char. Она и представляет собой разделитель целой и дробной части чисел в функциях преобразований "Строка <---> Число". В начале программы (например, перед Application.Initialize()) присваивай ему точку.

Кстати, это не единственная переменная такого рода.

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;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 15 июля 2011, 08:20


Мини-форум вопроса

Всего сообщений: 52; последнее сообщение — 21 июля 2011, 07:59; участников в обсуждении: 6.

Страницы: [1] [2] [3] [Следующая »]

Яковлев

Яковлев (статус: Посетитель), 15 июля 2011, 15:28 [#1]:

Извеняюсь, забыл сообщить версию делфи. У меня 2009 и ХЕ. DecimalSeparator := '.'; для старых версий делфи.Тут надо скорей всего использовать ресурсы винды, но как?
min@y™

min@y™ (статус: Доктор наук), 15 июля 2011, 15:40 [#2]:

Цитата (Яковлев):

DecimalSeparator := '.'; для старых версий делфи.

Откуда такая информация?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Яковлев

Яковлев (статус: Посетитель), 15 июля 2011, 16:03 [#3]:

Где то в дебрях встечал, но у меня не работает это.
Вадим К

Вадим К (статус: Академик), 15 июля 2011, 16:13 [#4]:

лучше это прием не использовать, если только нет особой необходимости. И DecimalSeparator := '.'; меняет только для самой программы (и всех, которые она запустит), все остальные остаются с своими разделителями.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 15 июля 2011, 16:35 [#5]:

Цитата (Вадим К):

лучше это прием не использовать, если только нет особой необходимости

Естественно. Чел настраивает всю винду под себя, а тут какая-то, понимаешь, прога-выскочка требует вводить данные так, как она хочет. Я б удалил её нах.

Цитата (Вадим К):

И DecimalSeparator := '.'; меняет только для самой программы (и всех, которые она запустит)

Абсолютно верно. Однако таков был и вопрос:

Цитата (Яковлев):

Цель одна, чтобы при работе с программой разделитель был точкой, а при выходе из программы разделитель - запятая.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 15 июля 2011, 16:40 [#6]:

Цитата (Яковлев):

Где то в дебрях встечал, но у меня не работает это.

Погуглил, не нашёл такого. Пруф давай, иначе не верю.

Чо не работает-то? Вот такая хрень работать будет?
var
  X: Double;
begin
  DecimalSeparator:= '.';
  try
    X:= StrToFloat('100.500');
    ShowMessage('Работает');
  except
    ShowMessage('Не работает');
  end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 15 июля 2011, 17:06 [#7]:

в вопросе есть ещё одно слово "Как правильно програмно изменить региональные настройки Win7 и XP"
Хотя по разному можно это трактовать.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 15 июля 2011, 17:15 [#8]:

Цитата (Вадим К):

Хотя по разному можно это трактовать.

Я таких вопросов за 11 лет начитался 100500 штук. И 99% сводились к тому, чтобы StrToFloat() работала с точкой.

Хотя, я знаю, как изменить региональные настройки. Для текущего юзера и для всех сразу, если из-под админского аккаунта. Однако, аффтар хочет чтобы они менялись по запуску проги и восстанавливались по выходу. Это подозрительно. Нахрена для всей системы? А если прога упадёт, то настройки не восстановятся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 15 июля 2011, 20:00 [#9]:

Яковлев: необходимо, чтобы другие программы тоже считали разделитель точкой, или чтобы считала разделитель точкой написанная программа?
Чисти код! Чисти код! Чисти код!
Яковлев

Яковлев (статус: Посетитель), 16 июля 2011, 03:27 [#10]:

Вадим К очень верно обратил внимание на поставленный вопрос. Трактовка у меня одна. Среда делфии и среда винды. Как правильно програмно изменить точку на запятую при входе и выходе в ОС. Эфект должен быть такой же, если бы я вручную сам бы изменил в настройках винды и установил разделитель точку. Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.
bugmenot

bugmenot (статус: 3-ий класс), 16 июля 2011, 04:32 [#11]:

по-моему, надо аспирину выпить, может само пройдёт...
виконання програми розпочинається з того самого мiсця, де призупинилося.

Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 10:04 [#12]:

Цитата:

...Как правильно програмно изменить точку на запятую при входе и выходе в ОС...

Цитата:

Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.

*facepalm*
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 10:05 [#13]:

В каких конкретно местах приложения у тебя используются вещественные числа?
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 16 июля 2011, 10:08 [#14]:

Цитата (Яковлев):

Вадим К очень верно обратил внимание на поставленный вопрос. Трактовка у меня одна. Среда делфии и среда винды. Как правильно програмно изменить точку на запятую при входе и выходе в ОС. Эфект должен быть такой же, если бы я вручную сам бы изменил в настройках винды и установил разделитель точку. Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.

Ну дык на мой вопрос ответь, я долго ждать-то буду? См. пост #6.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 10:17 [#15]:

min@y™: я подозреваю, что проблема в том, что запятые где-нибудь в TDBGird'е
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 10:29 [#16]:

Короче. Т.к. никаких данных по вопросу не поступило, вариант один:
Везде где у тебя может быть запятая делаешь такую шнягу:

str := StringReplace( str, ',', '.', [rfReplaceAll]);

Но это жопный метод и применять его следует только к строкам хранящим цифры.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 16 июля 2011, 10:31 [#17]:

Ждём ответа аффтара.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Яковлев

Яковлев (статус: Посетитель), 16 июля 2011, 11:48 [#18]:

Все ответы работают, но не это я хотел услышать. Читайте вопрос.
Вадим К рекомендует "лучше это прием не использовать, если только нет особой необходимости."
min@y™

min@y™ (статус: Доктор наук), 16 июля 2011, 11:57 [#19]:

Цитата (Яковлев):

Все ответы работают, но не это я хотел услышать. Читайте вопрос. Вадим К рекомендует "лучше это прием не использовать, если только нет особой необходимости."

И чо? // пацанский вопрос
Чо ж тебе надо-то? Определись уже.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 16 июля 2011, 19:30 [#20]:

Яковлев: щас мат попрёт!

Если ты хочешь, чтобы изменения касались твоей программы, НЕ ТРОГАЙ РЕГИОНАЛЬНЫЕ НАСТРОЙКИ!!!

Если ты хочешь трогать региональные настройки учти - ОНИ КАСАЮТСЯ ВСЕХ ПРИЛОЖЕНИЙ!!!

Под региональными настройками подразумеваю таковые настройки ОС.
Чисти код! Чисти код! Чисти код!

Страницы: [1] [2] [3] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.