Есть ли место, где я могу добавить код, который будет выполняться перед инициализацией модуля?
Причина, по которой я хочу это сделать, заключается в том, что мне нужно изменить DecimalSeparator, это нужно сделать до инициализации некоторых модулей. Я поместил его в исходный код проекта до Application.Initialize, но к тому времени уже слишком поздно.
Насколько я понимаю, единственный выбор, который у меня есть, - это вставить его в инициализацию модуля, которому нужно изменить DecimalSeparator, так ли это?
Заранее благодарю за любой совет.
3 ответа
Порядок инициализации в Delphi детерминирован: модули инициализируются в том же порядке, в котором их скомпилировал компилятор, и завершаются в обратном порядке. Компилятор запускается с начала предложения DPR uses и работает вниз, и для каждой найденной единицы он делает то же самое рекурсивно: запускается с начала uses strong> попробуйте скомпилировать каждый используемый модуль, который еще не скомпилирован, затем скомпилируйте текущий модуль. Поэтому, если вы можете вставить свой модуль до того, как любой другой будет скомпилирован, он будет инициализирован первым.
Если вы хотите убедиться, что он запускается первым, создайте новый модуль, внесите изменения в блок инициализации этого модуля, а затем убедитесь, что он попадает в DPR перед любым из модулей, которые будут зависеть от об изменениях. Возможно, вы даже захотите сделать его первым модулем, если у вас уже нет других модулей, которые «должны быть первыми», например, сменных менеджеров памяти.
Поместите его в раздел инициализации первого модуля в списке вашего проекта uses
, таким образом он будет выполняться раньше любого другого кода initialization
.
Слово предупреждения здесь.
У меня есть приложение, работающее на рабочем столе вошедшего в систему пользователя, и ПОСРЕДНИК тестирования приложения DecimalSeparator изменил для меня, без перезапуска приложения.
Раньше я устанавливал
DecimalSeparator := '.';
Один раз в коде FormCreate (), но этого, похоже, недостаточно. Итак, теперь я устанавливаю его каждый раз перед тем, как использовать функцию FormatFloat () (которая используется только в одном месте в моем приложении).
Я не знаю, ПОЧЕМУ это происходит, но, вероятно, происходят некоторые изменения общесистемных параметров, которые сбрасывают символ в ',' в моей системе.
Лучший способ избежать этого - это, вероятно, установить десятичный разделитель в конфигурации Windows на '.' чтобы избежать странных проблем ...
Похожие вопросы
Связанные вопросы
Новые вопросы
delphi
Delphi - это язык для быстрой разработки собственных приложений для Windows, macOS, Linux, iOS и Android с использованием Object Pascal. Название относится к языку Delphi, а также к его библиотекам, компилятору и IDE, которые используются для помощи в редактировании и отладке проектов Delphi.
FormatSettings
, где можно определитьDecimalSeparator
. Это сделает код детерминированным и поточно-ориентированным. См. Можно ли использовать DecimalSeparator, чтобы заставить функции Floattostr / Strtofloat использовать десятичную точку для получения дополнительной информации.