Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Странное поведение ShortDateFormat   Найти похожие ветки 

 
Andrey Prokopovich   (2006-11-23 23:28) [0]

Подскажите пожалуйста, как решить следующую проблему:

Имеется приложение интенсивно использующее переменые типа TDateTime и соответственно операции конвертирования DateTime в String.
При инициализации приложения устанавливаю глобальные переменные:
DateSeparator := "-";
ShortDateFormat := "yyyy/mm/dd";

Но в процессе работы программы без какой либо выявленной закономерности ShortDateFormat иногда принимает значение "dd.MM.yyyy".
Может ли windows влиять на эти переменные в приложении? Рассылая сообщения или еще как-то... Если, да, то как с этим бороться?

Заранее спасибо!


 
KilkennyCat ©   (2006-11-24 00:29) [1]

> как с этим бороться?

ну, перед каждым использованием вызвать заново установку формата.... хотя я такого глюка не встречал.


 
Anatoly Podgoretsky ©   (2006-11-24 00:32) [2]

> KilkennyCat  (24.11.2006 0:29:01)  [1]

Бывает в посторонних компонентах, они точно также меняют и не восстанавливают, или скажем ProcessMessages


 
KilkennyCat ©   (2006-11-24 00:54) [3]

> Anatoly Podgoretsky ©   (24.11.06 00:32)

Да, я потом тоже подумал о processmessages


 
Германн ©   (2006-11-24 01:08) [4]


> как с этим бороться?

Я предпочитаю пользоваться функцией FormatDateTime всегда.


 
Andrey Prokopovich   (2006-11-24 01:33) [5]


> Я предпочитаю пользоваться функцией FormatDateTime всегда.

Именно ей я и пользуюсь, но проблема несколько глубже (исключение возникает при попытке конвертирования строки в дату в компоненте бд)

FormatDateTime("d.mm.yy h:mm", IBQuery1.FieldByName("FIELDNAME").AsDateTime)
поле БД "FIELDNAME" типа string


 
Германн ©   (2006-11-24 01:38) [6]


> но проблема несколько глубже (исключение возникает при попытке
> конвертирования строки в дату в компоненте бд)

Ну а почему не написал этого в сабже? Этож совсем другой коленкор!


 
Andrey Prokopovich   (2006-11-24 01:48) [7]


> а почему не написал этого в сабже?

Сорри.
Дык, все работает 99% времени, но в один прекрасный момент ShortDateFormat вдруг принимает значение "dd.MM.yyyy". И всё. Полазил по исходникам используемых компонент, вроде нигде они не меняют.

Кстати, а каким боком тут ProcessMessages, расскажите плиз.


 
Германн ©   (2006-11-24 01:56) [8]


> Сорри.
> Дык, все работает 99% времени, но в один прекрасный момент
> ShortDateFormat вдруг принимает значение "dd.MM.yyyy". И
> всё. Полазил по исходникам используемых компонент, вроде
> нигде они не меняют.
>
> Кстати, а каким боком тут ProcessMessages, расскажите плиз.
>
>

Из справки:
The SysUtils unit includes a number of variables that are used by various formatting routines. Values are assigned to these variables to define the formats of numeric and date/time strings. The initial values of these variables are fetched from the system registry using the GetLocaleInfo function in the Win32 API. VCL (non-console) applications automatically update these formatting variables in response to WM_WININICHANGE messages. The Application variable’s UpdateFormatSettings method either allows or disallows changes in system settings. The default is True. Set this property to False to prevent the system settings from changing.


 
Anatoly Podgoretsky ©   (2006-11-24 07:38) [9]

> Andrey Prokopovich  (24.11.2006 1:48:07)  [7]

При том, что после него может быть выполнено что угодно.


 
Andrey Prokopovich   (2006-11-24 10:25) [10]


> The Application variable’s UpdateFormatSettings method either
> allows or disallows changes in system settings

Вот, это оно! А казалось, что искал везде :)
Всем Спасибо, за ответы.


 
Loginov Dmitry ©   (2006-11-24 15:05) [11]

Такая же беда была на работе с DecimalSeparator. Ставлю точку. Некоторое время работает, потом бах - и становится как в винде - ",". Лечится установкой разделителя в винде с помощью функции SetLocaleInfo при запуске приложения.


 
Andrey Prokopovich   (2006-11-24 22:59) [12]


> Лечится установкой разделителя в винде с помощью функции
> SetLocaleInfo при запуске приложения

Уж лучше по аналогии с UpdateFormatSettings при инициализации программы установить: Application.UpdateMetricSettings := False



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

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1165688556
XfroSt
2006-12-09 21:22
2007.01.14
Сохранеие иконки в файл своего типа


5-1146750823
pirate
2006-05-04 17:53
2007.01.14
"Экзотический" TMemo


4-1156808336
Servelat
2006-08-29 03:38
2007.01.14
как зная HBITMAP получить ширину/высоту картинки


15-1166870909
Parus
2006-12-23 13:48
2007.01.14
Впервые на экране.


2-1167124313
inkvizitor
2006-12-26 12:11
2007.01.14
chart