Как получить размер шрифта в Delphi - PullRequest
2 голосов
/ 28 мая 2010

Я ищу функцию, которая должна принимать параметры в виде имени шрифта, символа образца, ширины, высоты символа образца и возвращать размер шрифта.

Это должно выглядеть так:

    GetFontSize(<Font Name>, <Sample Character>, <Sample Character Width>,
                <Sample Character Height>)

, который должен вернуть размер шрифта,

Возможно ли это в Delphi?

Ответы [ 2 ]

5 голосов
/ 28 мая 2010

Возможно, вы захотите взглянуть на эту страницу, где обсуждается размер шрифта и баллы .

Для преобразования между точками и размером в пикселях используется следующее:

Arial 12pt at 96 dpi:

                      font size in points             12
font size in pixels = ------------------- × 96 dpi = ---- × 96 = 16 pixels
                      72 points per inch              72

Вы можете использовать это для своего преобразования. Вам просто нужно знать о возможных различиях в разрешении экрана, как заявляет Blorgbeard. Точки обычно используются для описания размера на бумаге. Вам нужно решить, как вы хотите отобразить это на экране. Например, многие программы позволят вам установить уровень масштабирования. Это не меняет размер отпечатка на бумаге, но влияет на высоту пикселей на экране.

В зависимости от того, что вы пытаетесь выполнить, вам может потребоваться получить фактические размеры шрифта. Если вы пытаетесь выяснить, как именно шрифт составлен, взгляните на Получение метрики шрифта Код на этой странице использует библиотеки .Net, но имеет хорошее объяснение. Если вы хотите получить текстовые метрики в Delphi, вы должны использовать функцию GetTextMetrics .

Как сказал Роб в своем комментарии, вы можете рисовать текст на определенной высоте, установив для свойства Font.Size отрицательную высоту в пикселях. Затем Windows вытянет текст на этой высоте. В этом случае вам не нужна конкретная буква или ширина, как у вас в функции прототипа. Для данного размера шрифта каждая буква будет иметь разную высоту и ширину. И.Е. заглавные буквы будут выше строчных, а буквы типа «W» будут шире букв типа «i».

2 голосов
/ 28 мая 2010

Мне известны только методы, позволяющие сделать обратное, то есть получить размеры в пикселях от размеров точек.

Единственный способ, которым я могу придумать, - это установить TCanvas и многократно вызывать GetTextExtent для него, каждый раз меняя размер шрифта, пока вы не получите размер, приемлемо близкий к тому, что вы хотите.

В зависимости от того, насколько вам это нужно, вы можете просто преобразовать желаемую высоту в пикселях в точки - точка составляет 1/72 дюйма, а ваш экран, вероятно, 96 пикселей на дюйм (но для получения отметки GetDeviceCaps реальная цифра). См этот вопрос .

Это даст вам размер шрифта, достаточно близкий к размеру пикселя, который вы хотите.

...