При разработке клиент-серверных приложений на FireMonkey, особенно с использованием Delphi, важно учитывать различия в настройках форматирования, которые могут быть в разных локалях. Одним из ключевых моментов является использование глобальной переменной FormatSettings, которая может быть изменена в различных частях программы, что приводит к неожиданным результатам при выводе данных.
Проблема
Пользователь столкнулся с проблемой, когда форматирование чисел в клиентской части приложения менялось при печати. Это происходило из-за использования глобальной переменной FormatSettings, которая перезаписывалась системными настройками. В частности, при вызове метода Printer.ActivePrinter.SelectDPI глобальные настройки форматирования восстанавливались к своим системным значениям.
Решение
Чтобы избежать подобных проблем, рекомендуется использовать собственные экземпляры TFormatSettings, которые не будут затронуты изменениями глобальных настроек. Пример создания и использования собственных настроек форматирования:
var
MyFormat: TFormatSettings;
begin
MyFormat := TFormatSettings.Create;
MyFormat.DecimalSeparator:='.';
MyFormat.ThousandSeparator:=' ';
end;
При выполнении операций форматирования следует передавать созданный экземпляр MyFormat в качестве последнего параметра функции.
Для функций, использующих глобальные настройки форматирования, необходимо перед их вызовом установить глобальные настройки в соответствии с нужными значениями и восстановить их после выполнения операций форматирования.
Важные замечания
Функция StrToFloat имеет перегрузку, принимающую собственные настройки форматирования в качестве параметра. Вероятно, многие другие функции также имеют подобную возможность, но разработчики могут быть не осведомлены о ней.
Не удалось воспроизвести утверждение о том, что вызов Printer.ActivePrinter.SelectDPI изменяет глобальные FormatSettings. Однако, если это подтвердится, рекомендуется сообщить об этом как об ошибке в систему отслеживания ошибок Embarcadero.
Заключение
При работе с форматированием чисел в клиент-серверных приложениях FireMonkey важно использовать собственные экземпляры TFormatSettings и, при необходимости, перегрузки функций, принимающие эти настройки в качестве параметров. Это позволит избежать неожиданных изменений формата чисел и обеспечить корректное отображение данных в клиентской части приложения, соответствующее настройкам сервера.
При разработке клиент-серверных приложений на FireMonkey важно правильно обращаться с глобальными настройками форматирования, чтобы избежать несоответствий в отображении чисел, особенно при работе с печатающими устройствами и глобальной переменной `Forma
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS