Поиск системных шрифтов с помощью Delphi

Как лучше всего найти все системные шрифты, доступные пользователю, чтобы их можно было отобразить в раскрывающемся списке?

Я также хотел бы различать шрифты Unicode и не-Unicode.

Я использую Delphi 2009, который полностью поддерживает Unicode, и мне нужно решение Delphi.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 205
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я могу ответить на половину вашего вопроса, вы можете получить список шрифтов, к которым ваша текущая среда имеет доступ, в виде списка строк из глобального объекта Screen

т.е.

Listbox1.Items.AddStrings(Screen.Fonts);

Вы можете посмотреть исходный код forms.pas, чтобы увидеть, как Codegear заполняет Screen.Fonts путем перечисления шрифтов Windows. Возвращенная структура LOGFONT имеет член набора символов, но это не обеспечивает простого определения «Unicode».

Насколько мне известно, Windows не может явно сказать вам, является ли шрифт «Unicode». Более того, если вы попытаетесь отобразить текст Unicode шрифтом, отличным от Unicode, Windows может заменить его другим шрифтом, поэтому трудно сказать, будет ли шрифт отображать Unicode или нет. Например, у меня есть древний файл шрифта Arial Black, который не содержит глифов Unicode, но если я использую его для отображения японского текста в заметке D2009, японский язык отображается правильно в Arial, а остальное - в Arial Black. В других примерах могут появиться обычные пустые квадраты.

Ответ принят как подходящий

Свойство Screen.Fonts заполняется через Функция API EnumFontFamiliesEx. Посмотрите в Forms.pas пример вызова этой функции.

Функция обратного вызова, которую он вызывает, получит запись TNewTextMetricEx, и одним из членов этой записи является TFontSignature. Поле fsUsb указывает, какие поддиапазоны Unicode шрифты утверждают для поддержки.

В системе фактически нет «шрифтов Unicode». Даже шрифты, в названии которых есть слово Юникод, не имеют глифов для символов все Unicode. Вы можете различать растровые, принтерные и шрифты TrueType, но, помимо этого, лучшее, что вы можете сделать, - это выяснить, поддерживает ли рассматриваемый шрифт нужные вам символы. И если шрифт не тот, который вы бы считали «шрифтом Unicode», но он поддерживает все необходимые символы, то какая разница? Для получения этой информации вас может заинтересовать GetFontUnicodeRanges.

Технология Microsoft для отображения текста с разными шрифтами в зависимости от того, какие шрифты содержат какие символы, - это Не описывать, особенно резервный шрифт. Мне ничего не известно о поддержке Uniscribe в Delphi; Однажды я начал писать для него набор единиц импорта, но мои интересы непостоянны, и я перешел к чему-то другому, прежде чем закончил его. Блог Майкла Каплана иногда говорит о Uniscribe, так что это еще одно место для поиска.

Другие вопросы по теме