|
Вопрос # 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™ (статус: Доктор наук), 15 июля 2011, 15:40 [#2]:
Цитата (Яковлев):
DecimalSeparator := '.'; для старых версий делфи.
Откуда такая информация?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Яковлев (статус: Посетитель), 15 июля 2011, 16:03 [#3]:
Где то в дебрях встечал, но у меня не работает это.
|
|
Вадим К (статус: Академик), 15 июля 2011, 16:13 [#4]:
лучше это прием не использовать, если только нет особой необходимости. И DecimalSeparator := '.'; меняет только для самой программы (и всех, которые она запустит), все остальные остаются с своими разделителями.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 15 июля 2011, 16:35 [#5]:
Цитата (Вадим К):
лучше это прием не использовать, если только нет особой необходимости
Естественно. Чел настраивает всю винду под себя, а тут какая-то, понимаешь, прога-выскочка требует вводить данные так, как она хочет. Я б удалил её нах.
Цитата (Вадим К):
И DecimalSeparator := '.'; меняет только для самой программы (и всех, которые она запустит)
Абсолютно верно. Однако таков был и вопрос:
Цитата (Яковлев):
Цель одна, чтобы при работе с программой разделитель был точкой, а при выходе из программы разделитель - запятая.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 15 июля 2011, 17:15 [#8]:
Цитата (Вадим К):
Хотя по разному можно это трактовать.
Я таких вопросов за 11 лет начитался 100500 штук. И 99% сводились к тому, чтобы StrToFloat() работала с точкой.
Хотя, я знаю, как изменить региональные настройки. Для текущего юзера и для всех сразу, если из-под админского аккаунта. Однако, аффтар хочет чтобы они менялись по запуску проги и восстанавливались по выходу. Это подозрительно. Нахрена для всей системы? А если прога упадёт, то настройки не восстановятся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 15 июля 2011, 20:00 [#9]:
Яковлев: необходимо, чтобы другие программы тоже считали разделитель точкой, или чтобы считала разделитель точкой написанная программа?
Чисти код! Чисти код! Чисти код!
|
|
Яковлев (статус: Посетитель), 16 июля 2011, 03:27 [#10]:
Вадим К очень верно обратил внимание на поставленный вопрос. Трактовка у меня одна. Среда делфии и среда винды. Как правильно програмно изменить точку на запятую при входе и выходе в ОС. Эфект должен быть такой же, если бы я вручную сам бы изменил в настройках винды и установил разделитель точку. Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.
|
|
bugmenot (статус: 3-ий класс), 16 июля 2011, 04:32 [#11]:
по-моему, надо аспирину выпить, может само пройдёт...
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Gooddy (статус: 3-ий класс), 16 июля 2011, 10:04 [#12]:
Цитата:
...Как правильно програмно изменить точку на запятую при входе и выходе в ОС...
Цитата:
Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.
*facepalm*
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июля 2011, 10:05 [#13]:
В каких конкретно местах приложения у тебя используются вещественные числа?
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 16 июля 2011, 10:08 [#14]:
Цитата (Яковлев):
Вадим К очень верно обратил внимание на поставленный вопрос. Трактовка у меня одна. Среда делфии и среда винды. Как правильно програмно изменить точку на запятую при входе и выходе в ОС. Эфект должен быть такой же, если бы я вручную сам бы изменил в настройках винды и установил разделитель точку. Естественно, вопрос идет о работе только с запущенной /написанной/ прогой, другие, у других свои параметры.
Ну дык на мой вопрос ответь, я долго ждать-то буду? См. пост #6.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 16 июля 2011, 10:17 [#15]:
min@y™: я подозреваю, что проблема в том, что запятые где-нибудь в TDBGird'е
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 16 июля 2011, 10:29 [#16]:
Короче. Т.к. никаких данных по вопросу не поступило, вариант один:
Везде где у тебя может быть запятая делаешь такую шнягу:
str := StringReplace( str, ',', '.', [rfReplaceAll]);
Но это жопный метод и применять его следует только к строкам хранящим цифры.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 16 июля 2011, 10:31 [#17]:
Ждём ответа аффтара.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Яковлев (статус: Посетитель), 16 июля 2011, 11:48 [#18]:
Все ответы работают, но не это я хотел услышать. Читайте вопрос.
Вадим К рекомендует "лучше это прием не использовать, если только нет особой необходимости."
|
|
min@y™ (статус: Доктор наук), 16 июля 2011, 11:57 [#19]:
Цитата (Яковлев):
Все ответы работают, но не это я хотел услышать. Читайте вопрос. Вадим К рекомендует "лучше это прием не использовать, если только нет особой необходимости."
И чо? // пацанский вопрос
Чо ж тебе надо-то? Определись уже.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 16 июля 2011, 19:30 [#20]:
Яковлев: щас мат попрёт!
Если ты хочешь, чтобы изменения касались твоей программы, НЕ ТРОГАЙ РЕГИОНАЛЬНЫЕ НАСТРОЙКИ!!!
Если ты хочешь трогать региональные настройки учти - ОНИ КАСАЮТСЯ ВСЕХ ПРИЛОЖЕНИЙ!!!
Под региональными настройками подразумеваю таковые настройки ОС.
Чисти код! Чисти код! Чисти код!
|
Страницы: [1] [2] [3] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|