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

Вниз

Изменение DecimalSeparator   Найти похожие ветки 

 
Chubais   (2003-01-10 10:16) [0]

Во время работы программы по невыясненным причинам меняется DecimalSeparator и выскакивают глюки. При запуске устанавливаю в точку, программа работает какое-то время. И иногда при активации приложения разделитель устанавливается в запятую (системная установка), получается ошибка. Такое ощущение, что при переходе в мое приложение из других, где действуют системные установки, разделитель-запятая подтягивается в мое приложение...
Как побороть? Не выставлять же во всех обработках задание DecimalSeparator?


 
Johnmen   (2003-01-10 10:28) [1]

Как было выявлено сиё странное поведение ?


 
Mike Kouzmine   (2003-01-10 10:37) [2]

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


 
Delirium^.Tremens   (2003-01-10 10:47) [3]

UpdateFormatSettings property (TApplication)

Specifies whether format settings are updated automatically when the user alters the system configuration.

По умолчанию - true, попробуй выставить в false;


 
Chubais   (2003-01-10 11:08) [4]

2 Johnmen © (10.01.03 10:28)
при работе с программой ))) в одно окно зайдешь, в другое, возвращаешься в свою программу - и тут же сообщение об ошибке (там на гриде в обработке OnGetCellParams расчет стоит)
2 Mike Kouzmine (10.01.03 10:37)
системные установки не меняются
просто мой разделитель не совпадает с системным (это я делаю при запуске), а потом при переключении в свое приложение уже совпадает - не всегда, как Вынь на душу положит
Delirium^.Tremens © (10.01.03 10:47)
спасибо, попробую


 
Anatoly Podgoretsky   (2003-01-10 11:21) [5]

Эта переменная не Thread Safe


 
Johnmen   (2003-01-10 11:52) [6]

>Chubais © (10.01.03 11:08)
>там на гриде в обработке OnGetCellParams расчет стоит

Подробности ?


 
Chubais   (2003-01-10 12:25) [7]

2 Johnmen © (10.01.03 11:52)

procedure TMyForm.DBGridEh1Columns1GetCellParams(Sender: TObject;
EditMode: Boolean; Params: TColCellParamsEh);
begin
if (Params.Text<>"") and (Params.Text<>"0")
then Params.Text:=Format("%8.2f",[расчет числа]);
end;
в расчете используется конвертация строки в число, там и возникает ошибка


 
Johnmen   (2003-01-10 12:50) [8]

>Chubais © (10.01.03 12:25)

Тогда понятно...
Известная фича процедуры конвертации - в ней используется системный десятичный сепаратор, а не тобой установленный. В отличие от контролов.


 
Delirium^.Tremens   (2003-01-10 13:16) [9]

Johnmen © (10.01.03 12:50)
Если речь идет о StrToFloat(), то ничего подобного за ней не замечал. Уточни, пожалуйста, про которую из всех перезагруженных версий идет речь?


 
Anatoly Podgoretsky   (2003-01-10 13:30) [10]

Для Format такого не должно происходить

For all floating-point formats, the actual characters used as decimal and thousand separators are obtained from the DecimalSeparator and ThousandSeparator global variables.

Но тут не приведена необзодимая информация "в расчете используется конвертация строки в число, там и возникает ошибка", нет самого куска где происходит ошибка, подземный стук однако.


 
Johnmen   (2003-01-10 15:25) [11]

Я имел в виду следующее :
Фича -
Для отображения данных в гриде всегда используется установленный программно десятичный сепаратор, а для контроля вводимых данных всегда используется системный десятичный сепаратор. А они могут не совпадать...



 
Игорь Шевченко   (2003-01-10 15:54) [12]

Johnmen © (10.01.03 15:25)

Где такая трава растет ? :-)


 
Johnmen   (2003-01-10 16:05) [13]

>Игорь Шевченко © (10.01.03 15:54)

В TDBGrid и аналогах в саду D5, D6.


 
Игорь Шевченко   (2003-01-10 16:22) [14]

Johnmen © (10.01.03 16:05)

Ткни в меня местом в исходнике VCL, плз.


 
Паша   (2003-01-10 18:07) [15]

Единственное место нашел, на которое можно грешить (Delphi4)
Forms.pas
function TApplication.CheckIniChange
.............
WM_WININICHANGE:
begin
if UpdateFormatSettings then
begin
SetThreadLocale(LOCALE_USER_DEFAULT);
!!! GetFormatSettings;
end;

но это ж как туда можно влезть?


 
Johnmen   (2003-01-12 02:06) [16]

>Игорь Шевченко © (10.01.03 16:22)
>Ткни в меня местом в исходнике VCL, плз.

В какое именно ? :)))
И почему возникает такое желание ?



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

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

Наверх





Память: 0.47 MB
Время: 0.034 c
1-72379
Sectey
2003-01-13 10:36
2003.01.23
В Паскале ParamStr, а в Си?


14-72483
.:Grits:.
2003-01-01 16:25
2003.01.23
Help for Win32?


1-72384
qwerty2
2003-01-13 14:22
2003.01.23
Создана ли форма?


1-72180
NewGuest
2003-01-13 17:09
2003.01.23
Есть Form1 и Form2, у первой стоит StayOnTop, на 2-й тоже самое


1-72312
S.P.I.R.I.T
2003-01-15 06:31
2003.01.23
Снимок диска





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