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

时间:2010-12-20 18:57:48

标签: delphi text width graphics32

我认为我的问题很清楚,但我解释得更多。简单地说,当我们在RenderText过程中使用AntiAlias时,TextWidth函数中获取的值不正确。我该怎么做才能获得正确的文字宽度?

2 个答案:

答案 0 :(得分:4)

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

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;

答案 1 :(得分:1)

您还可以使用Windows API函数GetTextExtentPoint32 做一些谷歌在Delphi上找到例子