powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Инициализация переменных "окружения" Delphi
17 сообщений из 17, страница 1 из 1
Инициализация переменных "окружения" Delphi
    #39831052
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Пробую обрисовать проблему
Windows - разделитель даты = . (точка)

Приложение созданное Delphi 7
В момент создания основного окна OnCreate инициализирую переменные "окружения" Delphi
разделитель даты = / (наклонная)
С этим значением переменной все прекрасно отрабатывает - проблем нет ......

Суть вопроса
Не закрывая приложение - выхожу из сеанса Windows (замечу это тонкий клиент сервера Win 12)
Через пару секунд вхожу в тот же сеанс - вижу свое незакрытое приложение - но !!!!
разделитель даты сказочным образом на системный . (точка) - ну соответственно полезли ошибки.

Почему так и какое событие использовать для устранения (OnShow ?)

Заранее благодарен !
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831063
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

наверное потому что он имплементирует системный разделитель, а вы ему периодически мешаете, но не всегда успеваете

Лучше исправить ошибки в программе, тем более обычно достаточно добавить нужный вам TFormatSettings к функциям преобразования
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831075
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Вы хотите сказать, что переменные "окружения" Delphi находятся в постоянном обновлении
и при активации сеанса закономерно изменяются, но приложение УЖЕ запущено....

А TFormatSettings - полагаете не подвержена такому воздействию ?
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831083
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

создайте просто свою локальную переменную этого типа и инициализируйте её как надо - её точно никто не тронет, большинство функций форматирования и деформатирования имеют вариант с использованием этой переменной в качестве параметра
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831086
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XПочему так... Видимо винда при пересоздании десктопа отсылает некое сообщение, которое воспринимается как необходимость переопределить переменные локали.

[quote HOME_X] Просто использовать два набора настроек - системный для экрана, и стандартный для файлов.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831148
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я преодолел проблему с неправильным форматом даты таким образом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
UNIT ...
   Uses Windows

IMPLEMENTATION
   //copied from JclWin32.pas
   function MAKELCID(LangId, SortId: WORD): DWORD;
   begin
      Result := (DWORD(SortId) shl 16) or DWORD(LangId);
   end;

INITIALIZATION
   SetThreadLocale(MAKELCID(LANG_GERMAN, SORT_DEFAULT));
   //SetThreadLocale(MAKELCID(LANG_RUSSIAN, SORT_DEFAULT));
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831192
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный метод:
- получить свою копию TFormatSettings
- настроить поля как нужно
- использовать ее для всех функций форматирования, где требуется фиксированный формат (обмен данными, вывод в файлы)
- оставить функции отображения зависящими от системных настроек

Иначе замучаетесь городить многоэтажные костыли.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831198
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Мнение не только моё, но подкреплено лично встреченными многочисленными примерами косяков при несоблюдении этих рекомендаций.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831252
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Правильный метод:
- получить свою копию TFormatSettings
- настроить поля как нужно
- использовать ее для всех функций форматирования, где требуется фиксированный формат (обмен данными, вывод в файлы)
- оставить функции отображения зависящими от системных настроек

Иначе замучаетесь городить многоэтажные костыли.
Проще так:

Код: pascal
1.
  Application.UpdateFormatSettings:=False;


И все.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831372
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПроще так:

Код: pascal
1.
  Application.UpdateFormatSettings:=False;


И все.



Именно ! Спасибо !

Код: pascal
1.
2.
3.
4.
5.
6.
begin
  Application.Initialize;
  Application.CreateForm(TfrMain, frMain);
  Application.UpdateFormatSettings:=False;
  if(frMain.bRun)then Application.Run;
end.



P.S. Я начал события "городить", которые исправили бы ситуацию

Спасибо !
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831379
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Application.UpdateFormatSettings:=False; первым поставь.

Мало ли у тебя на CreateForm какие действия происходят.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39831410
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод из серии заклеивания дыры в борту самолета жвачкой, имхо.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39926796
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне этот Application.FormatSettings не помогает, куда его не воткни...

Переопределяются выставленные мной в FormatSettings.CurrencyString и другие (DateSeparator,DecimalSeparator и др) значениями, установленнами виндой у этого юзера, причем глюк всплывает далеко не сразу, надо несколько часов подождать, подержать приложение открытым, и можно даже вообще ничего не делать, просто свернуто приложение. Отображение денежных полей да полей типа дата-время в гридах имею ввиду (TDBGRID и Delphi XE). Причем, если после того, как заметишь глюк этот, заново задать то же самое значение этой переменной, то проблема не устраняется, но поможет, если установить другое значение. Ну, или перезагрузить приложение, тоже помогает...

Причем, кажется, лет 20 уже назад это было все написано вот так, и работало корректно в приложениях это, причем даже не через FormatSettings.CurrencyString, а через deprecated-переменную CurrencyString. И вот сейчас на одной-единственной машине под Windows Server 2012, в терминалках, выявилось недели две назад, и больше нигде. На других машинах под управлением и 2012 и более ранних версий - ничего подобного. На десктопных машинах под WinXE-Win10 тоже ничего подобного. Начал копать, обнаружил, что и Application.FormatSettings у меня давным-давно в False выставлен. Тоже, значит, не помогает.
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39926798
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз появилось недавно, значит M$ выпустила новый апдейт...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39928687
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нашел: TJvAppEvents имеет свойство UpdateFromatSettings, которое переопределяет Application.UpdateFormatSettings постоянно, в true выставляет (а оно по дефолту так true и стоит). То есть, кладем на форму TjvAppEvents, открываем форму, и всё, Application.UpdateFormatSettings слетает в true. Если выставить в дизайне этой компоненте UpdateFormatSettings, то эффект уходит. JVCL 3.50, Delphi XE
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39928739
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
V.Borzov
А, нашел: TJvAppEvents имеет свойство UpdateFromatSettings, которое переопределяет Application.UpdateFormatSettings постоянно, в true выставляет (а оно по дефолту так true и стоит). То есть, кладем на форму TjvAppEvents, открываем форму, и всё, Application.UpdateFormatSettings слетает в true. Если выставить в дизайне этой компоненте UpdateFormatSettings, то эффект уходит. JVCL 3.50, Delphi XE


Наверное, очень суровое приложение, если оно использует Jedi
...
Рейтинг: 0 / 0
Инициализация переменных "окружения" Delphi
    #39928978
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

зарепорть сюда:
https://issuetracker.delphi-jedi.org/my_view_page.php
есть шанс что поправят
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Инициализация переменных "окружения" Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]