Главная страница
    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.044 c
14-1118266167
Megabyte
2005-06-09 01:29
2005.07.11
Хороший ФАК по FIB


1-1118659053
w666w
2005-06-13 14:37
2005.07.11
Запись/восстановление TComponent из строки.


11-1102687499
uuzh
2004-12-10 17:04
2005.07.11
Проблема с MCK в Delphi6


1-1119421536
sergg
2005-06-22 10:25
2005.07.11
Импорт из Word и Excel


14-1117694033
stone
2005-06-02 10:33
2005.07.11
Скоро и пешеходы будут передвигаться по правилам одностороннего д





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