【问题标题】:Override regional settings at the application start up在应用程序启动时覆盖区域设置
【发布时间】:2019-09-25 08:29:04
【问题描述】:

我想强制我的应用程序始终使用西班牙语区域设置,使用 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 变量。

【问题讨论】:

  • 不推荐,因为它不是线程安全的,但也是因为它是一个全局变量,所以你的代码可能会触及它(可能在几个完全不相关的地方),并且RTL 代码、第三方库 1、第三方库 2 和 ...
  • 不管怎样,你试过Application.UpdateFormatSettings吗?
  • 谢谢@AndreasRejbrand 是的,我已经尝试过 Application.UpdateFormatSettings := False;没有成功。
  • 另外,如果用户在您的程序运行时更改了他的系统设置,它将收到相应的 Windows 消息并通过更新 FormatSettings 来做出反应。
  • 是的,谢谢@dummzeuch。我已将其设置为 false 属性 Application.UpdateFormatSettings.

标签: delphi delphi-10.2-tokyo


【解决方案1】:

抱歉,问题不在于 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多