【问题标题】:How to get font size in delphidelphi如何获取字体大小
【发布时间】:2011-02-25 01:26:33
【问题描述】:

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

它必须是这样的:

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

必须返回字体大小,

这在delphi中可行吗?

【问题讨论】:

  • 要明确:您是否正在寻找以点为单位的字体大小,根据特定字符的宽度+高度(以像素为单位)计算得出?
  • 如果您只想绘制具有特定高度的文本,您可以将 Font.Size 属性设置为该高度的负数(以像素为单位)。例如,要获取 20 像素高的文本,只需将该属性设置为 -20。操作系统将为您完成剩下的工作。

标签: delphi fonts delphi-2007 font-size


【解决方案1】:

我只知道相反的方法 - 即从点大小获取像素大小。

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

根据您需要的精确度,您可以将所需的高度(以像素为单位)转换为点 - 一个点是 1/72 英寸,您的屏幕可能是每英寸 96 像素(但请查看 GetDeviceCaps 以获得真实的数字)。见this question

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

【讨论】:

  • 感谢 Blorgbeard 的回复。我会检查的
【解决方案2】:

您可能想看看这个讨论font size and points的页面。

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

Arial 12pt,96 dpi: 字体大小(以点 12 为单位) 以像素为单位的字体大小 = -------------------- × 96 dpi = ---- × 96 = 16 像素 每英寸 72 点 72

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

根据您要完成的工作,您可能需要获取字体的实际大小。如果您想确切了解字体是如何组合在一起的,请查看Obtaining Font Metrics 该页面上的代码使用 .Net 库,但它有一个很好的解释。如果你想在 Delphi 中获取文本度量,你可以使用 GetTextMetrics function

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

【讨论】:

  • 请注意,第一段中提供的链接不再可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多