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

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

Изменение DecimalSeparator [D6, Win2k]


Chubais ©   (2003-01-10 10:16:00) 

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


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

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

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


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

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

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


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

Johnmen © (10.01.03 16:05)

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


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

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

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


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

Johnmen © (10.01.03 15:25)

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


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

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


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

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

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

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


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

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


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

>Chubais © (10.01.03 12:25)

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


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

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 11:52:00) [11]

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

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


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

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


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

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


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

UpdateFormatSettings property (TApplication)

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

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


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

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


Johnmen   (2003-01-10 10:28:00) [16]

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


Наверх

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