Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Произвольное изменение региональных настроек   Найти похожие ветки 

 
dmitry501 ©   (2005-06-15 11:07) [0]

Приветствую всех.
Вылез сегодня такой глюк.
На машине стоит Win2K RUS. Региональные настройки все русские- т.е. разделитель дроби - "," и пр.
В программе в FormCreate написано
DecimalSeparator:=".";
для обеспечения независимости работы программы от региональных установок windows.

Так вот, если в процессе работы программы в USB вставить какое-либо устройство, то windows радостно напишет, что нашла новое устройство и установит его.
Вот только после этого в программе меняются региональные установки на дефолтные, которые установлены в windiws :(
Глюки вылезли на
Inputbox(Cash
StringReplace(Cash,",",".",[rfReplaceAll]);
StrToFloat(Cash

пришлось срочку
DecimalSeparator:=".";
прописывать везде, где была возможность возникновения подобной ошибки.
Кто знает, это чей это косяк, и можно ли его побороть более цивилизованно?


 
TUser ©   (2005-06-15 11:16) [1]

Если дело касается только DecimalSeparator - то можно написать свою StrToFloat примерно такого содержания
result:=StrToFloat(StringReplace(...))
Аналогично - переделать под себя все остальные регионо-зависимые функции, вынести все это в отдельный модуль и назвать его самым низким уровнем в архитектуре приложения.


 
dmitry501 ©   (2005-06-15 11:19) [2]

TUser ©   (15.06.05 11:16) [1]
Это в принципе уже Борландом сделано.
есть перегруженные функции типа
StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload;
но мне в принципе интересно, в чем проблема...


 
Reindeer Moss Eater ©   (2005-06-15 13:45) [3]

Application.UpdateFormatSettings:=False;


 
evvcom ©   (2005-06-15 14:20) [4]


> пришлось срочку
> DecimalSeparator:=".";
> прописывать везде, где была возможность возникновения подобной
> ошибки.

Прикинь, а параллельно твоей программе работает еще одна, которая постоянно борется с твоей и заменяет точку на запятую. Мое имхо: не надо писать такие уродские программы!


 
dmitry501 ©   (2005-06-16 05:27) [5]

evvcom ©   (15.06.05 14:20) [4]
Они не должны влиять друг на друга. В каждом процессе свои установки. Специально проверил- создал две програмки с таймером.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Label1.Caption := DecimalSeparator;
 If   DecimalSeparator = "." then
   DecimalSeparator := ","
 else
   DecimalSeparator := ".";
end;

Эта меняет по таймеру раз в сек.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Label1.Caption := DecimalSeparator;
end;

Эта вторая программа по таймеру просто показывает текущий разделитель. Таймер срабатывает чаще в 10 раз, чтобы не было корреляции. Так вот, во второй программе decimalseparator не меняется! Запустил еще пяток копий первой, во второй ничего не меняется. Так что мое ИМХО - про уродские программы не нужно писать, если не знаешь.


 
dmitry501 ©   (2005-06-16 05:34) [6]

Reindeer Moss Eater ©   (15.06.05 13:45) [3]
Спасибо, сделал так, пока все нормально. В справке написано,
Specifies whether format settings are updated automatically when the user alters the system configuration.
UpdateFormatSettings is checked when the application receives a WM_WININICHANGE message.
Т.е. windows посылает сообщение о том, что пользователь сменил системные настройки при установки нового устройства, и автоматом обновляется decimalseparator? Еще раз, спасибо.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
3-1117044062
syte_ser78
2005-05-25 22:01
2005.07.11
сортировка данных


3-1117074967
Ярослав
2005-05-26 06:36
2005.07.11
SQL Server Enterprise Manager


14-1118203605
lookin
2005-06-08 08:06
2005.07.11
Восстановить нетекстовый файл, отредактированный в Блокнот


14-1118143664
mmms
2005-06-07 15:27
2005.07.11
Зачем машины продаются? Раздавало бы государство


3-1117358511
Nikitian
2005-05-29 13:21
2005.07.11
Проблемы со шрифтами в Tquery vs TQreport





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский