Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1318317392
алешка
2011-10-11 11:16
2012.01.22
Значение в ячейке


15-1317627402
OW
2011-10-03 11:36
2012.01.22
Задумка. Игра Пираты. Интересно ли будет?


2-1318325199
jamix
2011-10-11 13:26
2012.01.22
как можно увеличить громкость wav файла?


15-1315145637
DVM
2011-09-04 18:13
2012.01.22
Официально вышла RAD Studio XE2


2-1318319704
санек
2011-10-11 11:55
2012.01.22
Номер строки DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский