如何在delphi中获取字体大小

问题描述 投票:2回答:2

我正在寻找一个函数,它的参数应该是字体名称、样本字符、样本字符的宽度和高度,并且应该返回字体大小。

它必须像这样。

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

它必须返回字体大小。

在delphi中可以这样做吗?

delphi fonts delphi-2007 font-size
2个回答
2
投票

我只知道有一些方法可以做相反的事情--即从点尺寸中获取像素尺寸。

我唯一能想到的方法是在这个函数中设置一个 TCanvas,并反复呼叫 GetTextExtent 上,每次都改变字体大小,直到你得到一个可以接受的接近你想要的大小。

根据你需要的精确程度,你可以将你所需要的高度以像素为单位转换为点--一个点是一英寸的172,而你的屏幕可能是每英寸96个像素(但请检查你的屏幕上有多少像素)。GetDeviceCaps 以获得真实数字)。) 见 这个问题.

这将使你的字体大小非常接近你想要的像素大小。


5
投票

你可能想看看这个页面,它讨论的是 字号和点数.

它使用以下方法在点和像素大小之间进行转换。

你可以用它来进行转换。 你只需要注意Blorgbeard所说的你的屏幕dpi可能存在的差异。 点通常用于描述纸上的尺寸。 你需要决定如何将其映射到屏幕上。 例如,许多程序将允许您设置一个缩放级别。 这不会改变纸张上的打印尺寸,但会影响屏幕上的像素高度。

根据你想达到的目的,你可能需要得到字体的实际大小。如果你想了解字体到底是如何组合在一起的,请看以下内容 获取字体指标 该页面的代码使用了.Net库,但它有一个很好的解释。 如果你想在Delphi中获得文本指标,你可以使用 GetTextMetrics函数.

正如Rob在他的评论中所说,你可以通过设置Font.Size属性为负高度(像素)来绘制特定高度的文本。Windows将以该高度绘制文本。 在这种情况下,你不需要一个特定的字母或宽度,因为你在原型函数中已经有了。 对于一个给定的字体大小,每个字母将有不同的高度和宽度。 例如,大写字母会比小写字母高,像 "W "这样的字母会比 "i "这样的字母宽。

© www.soinside.com 2019 - 2024. All rights reserved.