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

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

Странное поведение ShortDateFormat [D7, WinXP]


Andrey Prokopovich ©   (2006-11-23 23:28:00) 

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

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

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

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


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


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

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


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

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


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


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

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


Anatoly Podgoretsky   (2006-11-24 07:38:00) [4]

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

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


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


> Сорри.
> Дык, все работает 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.


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


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

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

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


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


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

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


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


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

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

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


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


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

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


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

> Anatoly Podgoretsky ©   (24.11.06 00:32)

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


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

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

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


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

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

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


Наверх

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