Форум: "Основная";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
ВнизЧто может менять DateSeparator во время исполнения? Найти похожие ветки
← →
Дмитрий Белькевич (2010-08-05 13:15) [0]Меняю в конструкторе главной формы DateSeparator:
DateSeparator := "-";
На одной из юзерских машин DateSeparator меняется обратно на дефолтный (на точку). На моём буке работает нормально.
← →
Anatoly Podgoretsky © (2010-08-05 13:27) [1]> Дмитрий Белькевич (05.08.2010 13:15:00) [0]
Не трожь DateSeparator - потоко опасно.
← →
Дмитрий Белькевич (2010-08-05 14:12) [2]Как его тогда можно поменять?
← →
Anatoly Podgoretsky © (2010-08-05 14:24) [3]> Дмитрий Белькевич (05.08.2010 14:12:02) [2]
А зачем тебе тогда его менять. Нормальный путь - через региональные
настройки и только с согласия пользователя. Если при этом что то будет
менять DateSeparator, то ищи трояна.
← →
Дмитрий Белькевич (2010-08-05 14:51) [4]Ну я глобальные настройки-то не трогаю. Мне в пределах программы нужно поменять.
← →
Игорь Шевченко © (2010-08-05 15:00) [5]
> Мне в пределах программы нужно поменять.
вместо
OldSep := DecimalSeparator;
DecimalSeparator := ".";
try
Foo := StrToFloat(S);
finally
DecimalSeparator := OldSep;
end;
следует писать:
var
FS: TFormatSettings;
begin
GetLocaleFormatSettings(GetThreadLocale, FS);
FS.DecimalSeparator := ".";
Foo := StrToFloat(S, FS);
end;
← →
Плохиш © (2010-08-05 15:03) [6]
> Дмитрий Белькевич (05.08.10 13:15)
UpdateFormatSettings := false:
← →
Anatoly Podgoretsky © (2010-08-05 15:09) [7]> Дмитрий Белькевич (05.08.2010 14:51:04) [4]
Я же писал, что это потоконебезопасно.
← →
Anatoly Podgoretsky © (2010-08-05 15:11) [8]> Игорь Шевченко (05.08.2010 15:00:05) [5]
Можно проще
var
FS: TFormatSettings;
begin
// GetLocaleFormatSettings(GetThreadLocale, FS);
FS.DecimalSeparator := ".";
Foo := StrToFloat(S, FS);
end;
← →
Дмитрий Белькевич (2010-08-05 16:45) [9]
> Я же писал, что это потоконебезопасно.
А что именно потоконебезопасно? Сам процесс изменения, то, что локальные настройки отличаются от глобальных или еще что-то? Вообще - сам процесс изменения выполняется только один раз (во время создания главной формы).
UpdateFormatSettings, скорее всего не при чём - проблема возникает стабильно и почти сразу после запуска программы. Не думаю, что юзеры постоянно в винде меняют настройки.
← →
Медвежонок Пятачок © (2010-08-05 17:56) [10]UpdateFormatSettings, скорее всего не при чём
фикли ты тогда здесь делаешь?
← →
Плохиш © (2010-08-05 19:44) [11]
> Дмитрий Белькевич (05.08.10 16:45) [9]
> Не думаю, что юзеры постоянно в винде меняют настройки.
Сам ты недокодер, юзеры здесь не при чём.
← →
Anatoly Podgoretsky © (2010-08-05 19:44) [12]> Дмитрий Белькевич (05.08.2010 16:45:09) [9]
А то, что decimalseparator может быть изменен в любой момент, кем угодно и
такие трояны имеют место быть.
← →
trsas © (2010-08-06 03:41) [13]
> Anatoly Podgoretsky © (05.08.10 19:44) [12]
>
> > Дмитрий Белькевич (05.08.2010 16:45:09) [9]
>
> А то, что decimalseparator может быть изменен в любой момент,
> кем угодно и
> такие трояны имеют место быть.
>
Не надо ссылаться на троянов.
Достаточно сказать, что любая программа созданная "недокодером" (с) Плохиш может поменять эти настройки.
А значит значения сепараторов надо использовать только в режиме рид-онли.
← →
Anatoly Podgoretsky © (2010-08-06 09:01) [14]> trsas (06.08.2010 03:41:13) [13]
Если какая то программа меняет decimalseparator, так что это влияет на
других, по сути является трояном, по определению. Почему некоторые за троян
признают только те программы, которые передают логины и пароли на сторону.
← →
Anatoly Podgoretsky © (2010-08-06 09:06) [15]> trsas (06.08.2010 03:41:13) [13]
Кроме decimalseparator некоторые также меняют правила округления, форматы
дат.
Format Setting и должен использоваться только в режиме рид-онли.
Правильно искользовать как Игорь Шевченко © (05.08.10 15:00) [5]
← →
Дмитрий Белькевич (2010-08-06 09:50) [16]Всё понятно, всем спасибо, буду разбираться.
← →
sniknik © (2010-08-06 10:08) [17]ну так decimalseparator в дельфи это просто глобальная переменная, не метод присвоение к которому могло бы "сбить" настройки в винде... область действия только сама программа.
т.е. вполне допустимо написать в начале программы
DecimalSeparator:= ".";
UpdateFormatSettings:= false;
и не парится "хитрыми" методами/дополнительными присвоениями. и оно сразу станет потокобезопасной т.к. апликейшн не будет пытаться обновить их/перезаписывать из системы.
> Вообще - сам процесс изменения выполняется только один раз (во время создания главной формы).
не только, это обсуждали как то, нашли пару других мест.
← →
Игорь Шевченко © (2010-08-06 10:12) [18]
> и не парится "хитрыми" методами/дополнительными присвоениями.
> и оно сразу станет потокобезопасной т.к. апликейшн не будет
> пытаться обновить их/перезаписывать из системы.
наивный
← →
Дмитрий Белькевич (2010-08-06 10:39) [19]
> не только, это обсуждали как то, нашли пару других мест.
Уточняю: мною изменяется только один раз. О других возможностях и спрашивал.
← →
Anatoly Podgoretsky © (2010-08-06 10:59) [20]> sniknik (06.08.2010 10:08:17) [17]
Так на это и есть жалоба, что устанавливать бессмысленно, поскольку какая то
сука меняет обратно. Потокобезопасной оно не станет, да апликейшн не будет
пытаться обновить их/перезаписывать из системы, но это не относится к другим
модулям и потокам. В любой момент кто угодно может это изменить, это
глобальная переменная.
← →
Anatoly Podgoretsky © (2010-08-06 11:00) [21]> Дмитрий Белькевич (06.08.2010 10:39:19) [19]
Не надо это делать. Как минимум непрофессионално.
← →
sniknik © (2010-08-06 11:28) [22]> О других возможностях и спрашивал.
ну там вроде было, что при создании окна... точно не помню. т.е. это не только когда ты create форме делаешь, но и меняешь параметры которые приводят к его пересозданию.
> Как минимум непрофессионално.
ну, в хелпе обычно пишут предупреждения типа
> The first form of FloatToStr is not thread-safe
что сразу должно отсечь попытки использования функции, неважно из-за глобальных меняющихся переменных это или чего-то другого.
т.е. есть разница использовать функцию, или считать переменную из потока напрямую без использования синхронизации, т.к. никто больше ее не меняет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c