Настройка шрифтов и цветов

Гарантии стабильной работы шрифтов и цветов
При настройке шрифтов и цветов в проектах Delphi вы получаете следующие гарантии: гарантия обратной совместимости — если вы используете стандартные системные шрифты (Tahoma, Segoe UI, Courier New) и базовые цвета (clBtnFace, clWindow, clHighlight), они будут корректно отображаться на всех Windows-платформах, поддерживаемых Delphi 10.x и 11.x. Гарантия отсутствия сдвигов верстки — при условии, что вы не задаёте фиксированные пиксельные размеры шрифта, а используете относительные единицы (Points) и учитываете DPI-аспекты. Гарантия целостности цветовой схемы — если вы привязываете цвета к системной палитре (clSilver, clMaroon), смена темы ОС не приведёт к инверсии или исчезновению элементов.
Риски, которые могут испортить проект
Пренебрежение настройками влечёт конкретные риски:
- Риск искажения шрифтов на высоких DPI. Если вы используете шрифты с фиксированным кеглем (например, 8pt без настройки AutoSize), на мониторах 4K элементы станут микроскопическими или, наоборот, размытыми. Проверьте: свойство Scaled на форме должно быть True, а шрифт должен быть назначен через Screen.MenuFont.
- Риск потери читаемости при смене темы. Указывая конкретные RGB-цвета (например, clGreen), вы лишаете пользователя адаптации к тёмной теме. Результат: белый текст на ярко-зелёном фоне. Гарантированное решение — использовать системные цвета или внедрить отдельного обработчика события OnChangeColor в TColorDialog.
- Риск графических артефактов при рендеринге. Использование нестандартных веб-шрифтов (ttf, otf без лицензии) в TFont.Name может привести к тому, что на машине без такого шрифта система самовольно подставит Arial, сломав сетку контейнеров. Проверка: в конструкторе формы добавьте перечисление Font.Name окружения.
Что проверять до выбора параметров — чтобы не жалеть
Чтобы избежать неприятностей на этапе эксплуатации, выполните три проверки перед фиксацией настроек:
- Проверьте целевую аудиторию. Если приложение поставляется для корпоративной среды (Windows 10/11 с одинаковыми политиками), можно смело использовать нестандартные шрифты с принудительной установкой через установщик. Если же продукт open-source — ограничьтесь стандартным набором.
- Протестируйте цвета на контраст. Создайте тестовый модуль, который циклически меняет TColor на каждом элементе формы. Вы убедитесь, что для строки StatusBar и TEdit одинаковый цвет clBlue делает текст нечитаемым на clNavy. Проверку следует делать при ярком солнечном свете и при ночной теме.
- Проверьте наследование шрифтов. Убедитесь, что ParentFont = True для всех контролов. Иначе изменение шрифта на TForm не применится к TButton — это частая причина появления разнобоя в размерах. Гарантия единообразия достигается только через цепочечное наследование.
Гарантии при использовании внешних библиотек
Если вы применяете сторонние компоненты (например, TMS или DevExpress) и настраиваете их шрифты, гарантируется: при обновлении библиотеки до новой версии шрифты не «съедут», если вы не переопределили их через style-тейги. Риск появляется, когда разработчик вручную копирует настройки из демо-проекта без проверки License-файла — некоторые шрифты защищены. Решение: всегда используйте свойство Font в дизайнере, а не присваивайте Name через код.
Гарантированный способ избежать сожалений
Самый надёжный подход — создать базовый класс TCustomForm и переопределить в нём метод Loaded. В этом методе задать шрифт и цвета однократно. Тогда риски потери настроек при наследовании форм сводятся к нулю. Пример гарантии: после смены DPI с 96 на 144 все элементы сохранят пропорции, так как вы используете ScaleBy. Проверочный сценарий: запустите приложение на ноутбуке с 125% масштабом и на проекторе с 100% — разница в читаемости должна отсутствовать.
Добавлено: 27.04.2026
