私の質問は十分に明確だと思いますが、さらに説明します。簡単に言えば、RenderText プロシージャで AntiAlias を使用している場合、TextWidth 関数内で取得される値が正しくありません。適切なテキスト幅を得るにはどうすればよいですか?
1859 次
2 に答える
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;
于 2010-12-20T20:36:48.887 に答える
1
Windows API 関数GetTextExtentPoint32を使用することもできます。Google で Delphi の例を見つけます。
于 2010-12-21T00:14:19.047 に答える