如何在delphi中获取字体大小

时间:2010-05-28 09:47:45

标签: delphi fonts delphi-2007 font-size

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

它必须如下所示:

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

必须返回字体大小,

这是否可以在delphi中使用?

2 个答案:

答案 0 :(得分:5)

您可能需要查看此页面,其中讨论了font size and points

它使用以下内容在点和像素大小之间进行转换:

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所说的屏幕dpi可能存在的差异。点通常用于描述纸张尺寸。您需要决定如何将其映射到屏幕。例如,许多程序将允许您设置缩放级别。这不会改变纸张上的打印尺寸,但会影响屏幕上的像素高度。

根据您要完成的操作,您可能需要获取字体的实际大小。如果您正试图找出字体的确切排列方式,请查看Obtaining Font Metrics该页面上的代码使用.Net库,但它有一个很好的解释。如果你想在Delphi中获得Text Metrics,你可以使用GetTextMetrics function

正如Rob在评论中所述,您可以通过将Font.Size属性设置为负高度(以像素为单位)来绘制特定高度的文本。然后,Windows将在该高度绘制文本。在这种情况下,您不需要原型函数中的特定字母或宽度。对于给定的字体大小,每个字母将具有不同的高度和宽度。 I.E.大写字母将高于小写字母,而像“W”的字母将比“i”之类的字母宽。

答案 1 :(得分:2)

我只知道相反的方法 - 也就是说,从点大小获取像素大小。

我能想到的唯一方法就是设置一个TCanvas,并在其上重复调用GetTextExtent,每次更改字体大小,直到你得到一个可接受的大小接近你的大小想。

根据您需要的准确度,您可以将所需的高度(以像素为单位)转换为点数 - 点数为1/72英寸,屏幕可能为每英寸96像素(但请检查GetDeviceCaps得到真实的数字)。请参阅this question

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