Переопределить региональные настройки при запуске приложения - PullRequest
1 голос
/ 25 сентября 2019

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

program TestProject;

uses
  Vcl.Forms,
  SysUtils,
  Rutinas in 'Rutinas.pas',
  Conexion in 'Conexion.pas' {dmConexion: TDataModule},
  MainForm in 'MainForm.pas' {frmMainForm};

{$R *.res}

begin
  Application.Initialize;

  FormatSettings := TFormatSettings.Create('es-ES');

  Application.MainFormOnTaskbar := True;
  Application.Title := Application_Name;
  Application.CreateForm(TdmConexion, dmConexion);
  Application.CreateForm(TfrmMainForm, frmMainForm);
  Application.Run;
end.

Спасибо.

PS: я знаю, что FormatSettings не рекомендуется, потому что он не безопасен для потоков, но это не должно быть проблемой.здесь, потому что я изменяю его только один раз при запуске приложения, в любое другое время, когда мне нужно настраиваемое преобразование, я использую локальную переменную TFormatSettings.

1 Ответ

2 голосов
/ 25 сентября 2019

Прошу прощения, проблема была не в Delphi, а в элементах управления DevExpress, которые я использую для представления данных.

DevExpress использует свои собственные настройки формата: https://www.devexpress.com/Support/Center/Question/Details/A517/how-to-use-custom-formats-for-editors

Теперь этоработает правильно:

program TestProject;

uses
  Vcl.Forms,
  SysUtils,
  cxFormats,
  Rutinas in 'Rutinas.pas',
  Conexion in 'Conexion.pas' {dmConexion: TDataModule},
  MainForm in 'MainForm.pas' {frmMainForm};

{$R *.res}

begin
  Application.Initialize;

  FormatSettings := TFormatSettings.Create('es-ES');
  Application.UpdateFormatSettings := False;
  cxFormatController.BeginUpdate;
  cxFormatController.UseDelphiDateTimeFormats := True;
  cxFormatController.EndUpdate;
  cxFormatController.GetFormats;
  cxFormatController.NotifyListeners;

  Application.MainFormOnTaskbar := True;
  Application.Title := Application_Name;
  Application.CreateForm(TdmConexion, dmConexion);
  Application.CreateForm(TfrmMainForm, frmMainForm);
  Application.Run;
end.
...