|
一次性获取文本中每个字形的自然步进量和总宽度(v2.218.1)
Delphi 语法:
function GetWideCharAdvances ( const Text: WideString; out TotalWidth: Single; out Advances: array of Single ): Boolean;
说明
GetWideCharAdvances 通过单次 GDI GetTextExtentExPointW 调用,同时获得每个字形的自然步进量(含字距,用户空间点,与 GetWideTextWidth 相同单位)和行总宽度,效率远高于逐字形调用 N+1 次 GetWideTextWidth。调用方须在调用前将 Advances 数组 SetLength 至少 Length(Text) 个元素。GDI 调用失败时返回 False,调用方应回退到 GetWideTextWidth / TextOut。适合用于两端对齐、表格布局及一次性需要所有字形宽度的场景
参数
| Namn | 说明 |
Text | 要测量的 Unicode 文本 |
TotalWidth | [out] 整行总宽度(用户空间点) |
Advances | [out] 每个字形的自然步进量数组;调用前须 SetLength 至 Length(Text) |
返回值
成功时返回 True,并填充 TotalWidth 和 Advances;GDI 失败时返回 False
代码示例
// 取得 "Hello" 每个字形的步进量,然后通过 ExtTextOut 输出精确字距
var
Text: WideString;
TotalW: Single;
Adv: array of Single;
begin
Text := 'Hello';
SetLength(Adv, Length(Text));
if HPDF.CurrentPage.GetWideCharAdvances(Text, TotalW, Adv) then
HPDF.CurrentPage.ExtTextOut(50, 400, 0, Text, Adv)
else
HPDF.CurrentPage.TextOut(50, 400, 0, Text);
end;
另请参阅: GetWideTextWidth ExtTextOut GetWideTextRowCount
|