Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.22;
Скачать: CL | DM;

Вниз

Что может менять 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.008 c
2-1318329821
Евгений07
2011-10-11 14:43
2012.01.22
Indy передать файл на сервер


2-1318595251
Очень Злой
2011-10-14 16:27
2012.01.22
Unicode


15-1317980974
Scott Storch
2011-10-07 13:49
2012.01.22
Понятия "сфера" и "область".


15-1318010585
Android Master
2011-10-07 22:03
2012.01.22
Ищу форум по программированию Андроида.


15-1317445057
Gtxfnm
2011-10-01 08:57
2012.01.22
Печать больших форматов на А4