Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что может менять DateSeparator во время исполнения?


Страницы:   1 2

Дмитрий Белькевич ©   (2010-08-05 13:15:00) 

Меняю в конструкторе главной формы DateSeparator:

DateSeparator := '-';

На одной из юзерских машин DateSeparator меняется обратно на дефолтный (на точку). На моём буке работает нормально.


sniknik   (2010-08-06 11:28:00) [1]

> О других возможностях и спрашивал.
ну там вроде было, что при создании окна... точно не помню. т.е. это не только когда ты create форме делаешь, но и меняешь параметры которые приводят к его пересозданию.

> Как минимум непрофессионално.
ну, в хелпе обычно пишут предупреждения типа
> The first form of FloatToStr is not thread-safe
что сразу должно отсечь попытки использования функции, неважно из-за глобальных меняющихся переменных это или чего-то другого.
т.е. есть разница использовать функцию, или считать переменную из потока напрямую без использования синхронизации, т.к. никто больше ее не меняет.


Anatoly Podgoretsky   (2010-08-06 11:00:00) [2]

> Дмитрий Белькевич  (06.08.2010 10:39:19)  [19]

Не надо это делать. Как минимум непрофессионално.


Anatoly Podgoretsky   (2010-08-06 10:59:00) [3]

> sniknik  (06.08.2010 10:08:17)  [17]

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


Дмитрий Белькевич   (2010-08-06 10:39:00) [4]


> не только, это обсуждали как то, нашли пару других мест.


Уточняю: мною изменяется только один раз. О других возможностях и спрашивал.


Игорь Шевченко   (2010-08-06 10:12:00) [5]


> и не парится "хитрыми" методами/дополнительными присвоениями.
>  и оно сразу станет потокобезопасной т.к. апликейшн не будет
> пытаться обновить их/перезаписывать из системы.


наивный


sniknik   (2010-08-06 10:08:00) [6]

ну так decimalseparator в дельфи это просто глобальная переменная, не метод присвоение к которому могло бы "сбить" настройки в винде... область действия только сама программа.

т.е. вполне допустимо написать в начале программы
DecimalSeparator:= '.';
UpdateFormatSettings:= false;

и не парится "хитрыми" методами/дополнительными присвоениями. и оно сразу станет потокобезопасной т.к. апликейшн не будет пытаться обновить их/перезаписывать из системы.

> Вообще - сам процесс изменения выполняется только один раз (во время создания главной формы).
не только, это обсуждали как то, нашли пару других мест.


Дмитрий Белькевич   (2010-08-06 09:50:00) [7]

Всё понятно, всем спасибо, буду разбираться.


Anatoly Podgoretsky   (2010-08-06 09:06:00) [8]

> trsas  (06.08.2010 03:41:13)  [13]

Кроме decimalseparator некоторые также меняют правила округления, форматы
дат.
Format Setting и должен использоваться только в режиме рид-онли.
Правильно искользовать как Игорь Шевченко ©   (05.08.10 15:00) [5]


Anatoly Podgoretsky   (2010-08-06 09:01:00) [9]

> trsas  (06.08.2010 03:41:13)  [13]

Если какая то программа меняет decimalseparator, так что это влияет на
других, по сути является трояном, по определению. Почему некоторые за троян
признают только те программы, которые передают логины и пароли на сторону.


trsas   (2010-08-06 03:41:00) [10]


> Anatoly Podgoretsky ©   (05.08.10 19:44) [12]
>
> > Дмитрий Белькевич  (05.08.2010 16:45:09)  [9]
>
> А то, что decimalseparator может быть изменен в любой момент,
>  кем угодно и
> такие трояны имеют место быть.
>

Не надо ссылаться на троянов.
Достаточно сказать, что любая программа созданная "недокодером" (с) Плохиш может поменять эти настройки.
А значит значения сепараторов надо использовать только в режиме рид-онли.


Anatoly Podgoretsky   (2010-08-05 19:44:00) [11]

> Дмитрий Белькевич  (05.08.2010 16:45:09)  [9]

А то, что decimalseparator может быть изменен в любой момент, кем угодно и
такие трояны имеют место быть.


Плохиш   (2010-08-05 19:44:00) [12]


> Дмитрий Белькевич   (05.08.10 16:45) [9]


> Не думаю, что юзеры постоянно в винде меняют настройки.

Сам ты недокодер, юзеры здесь не при чём.


Медвежонок Пятачок   (2010-08-05 17:56:00) [13]

UpdateFormatSettings, скорее всего не при чём

фикли ты тогда здесь делаешь?


Дмитрий Белькевич   (2010-08-05 16:45:00) [14]


> Я же писал, что это потоконебезопасно.


А что именно потоконебезопасно? Сам процесс изменения, то, что локальные настройки отличаются от глобальных или еще что-то? Вообще - сам процесс изменения выполняется только один раз (во время создания главной формы).

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


Anatoly Podgoretsky   (2010-08-05 15:11:00) [15]

> Игорь Шевченко  (05.08.2010 15:00:05)  [5]

Можно проще

var
FS: TFormatSettings;
begin
// GetLocaleFormatSettings(GetThreadLocale, FS);
FS.DecimalSeparator := '.';
Foo := StrToFloat(S, FS);
end;


Anatoly Podgoretsky   (2010-08-05 15:09:00) [16]

> Дмитрий Белькевич  (05.08.2010 14:51:04)  [4]

Я же писал, что это потоконебезопасно.


Плохиш   (2010-08-05 15:03:00) [17]


> Дмитрий Белькевич   (05.08.10 13:15)  

UpdateFormatSettings := false:


Игорь Шевченко   (2010-08-05 15:00:00) [18]


> Мне в пределах программы нужно поменять.


вместо

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 14:51:00) [19]

Ну я глобальные настройки-то не трогаю. Мне в пределах программы нужно поменять.


Anatoly Podgoretsky   (2010-08-05 14:24:00) [20]

> Дмитрий Белькевич  (05.08.2010 14:12:02)  [2]

А зачем тебе тогда его менять. Нормальный путь - через региональные
настройки и только с согласия пользователя. Если при этом что то будет
менять DateSeparator, то ищи трояна.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо