如何在 Graphics32 中检索 RenderText 的确切文本宽度

Posted

技术标签:

【中文标题】如何在 Graphics32 中检索 RenderText 的确切文本宽度【英文标题】:how to retrieve exact text width for RenderText in Graphics32 【发布时间】:2011-05-28 10:19:39 【问题描述】:

我认为我的问题很清楚,但我解释得更多。简单地说,当我们在 RenderText 过程中使用 AntiAlias 时,TextWidth 函数中得到的值是不正确的。如何获得正确的文本宽度?

【问题讨论】:

问题解决了吗? 是的。使用您提供的代码完美完成。再次感谢你!!我真的需要这个 【参考方案1】:

您可以在自己的代码中查找算法。他们还必须计算它。不管怎样,我就是这样做的。

function TGR32Canvas.TextWidth(const Text: string): Integer;
var
  TempFont: TFont;
  TempWidth: Integer;
begin
  if Text <> '' then
  begin
    TempFont := TFont.Create;
    try
      TempFont.Assign(Font);
      TempFont.Size := Font.Size shl AA_MODE;
      TempWidth := GetTextWidth(Text, TempFont);
    finally
      TempFont.Free;
    end;
  end
  else
    TempWidth := 0;

  TempWidth := (TempWidth shr AA_MODE + 1) shl AA_MODE;
  Result := TempWidth shr AA_MODE;
end;

GetTextWidth 函数很简单。你可以做不同的事情。

function GetTextWidth(const Text: string; const Font: TFont): Integer;
var
  Canvas: TCanvas;
begin
  Canvas := TCanvas.Create;
  try
    Canvas.Handle := GetDC(0);
    try
      Canvas.Font.Assign(Font);
      Result := Canvas.TextWidth(Text);
    finally
      ReleaseDC(0, Canvas.Handle);
    end;
  finally
    Canvas.Free;
  end;
end;

【讨论】:

你是从哪个单位得到的? GetTextWidth 函数不明。 忘记展示了。我编辑了答案。它可能可以做得更优雅,但想法是一样的,并且有效。 没问题,很高兴能帮上忙 :)【参考方案2】:

您也可以使用 Windows API 函数GetTextExtentPoint32 做一些谷歌寻找德尔福的​​例子

【讨论】:

GR32 使用自己的绘图技术,所以我认为使用 API 不会给你准确的结果。

以上是关于如何在 Graphics32 中检索 RenderText 的确切文本宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何检索文本字段文本并将其作为整数 32 存储在核心数据中?

Yii如何从数据库中检索数据并在视图中显示

如何在 c# 中使用 user32.dll 从类“ThunderRT6ListBox”的窗口中检索值

手记解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题

如何获取JPanel中某个点的颜色? [关闭]

如何在linux下配置AndroidStudio开发环境