如何获得字体宽度?(50分)

  • 主题发起人 主题发起人 zzz
  • 开始时间 开始时间
Z

zzz

Unregistered / Unconfirmed
GUEST, unregistred user!
有些字体不是每个字母都有相同的宽度,在TextOut时,
如何得知每个字符的宽度?
 
Hehehe, 50分应该是我的了吧? :)
调用TCanvas.TextWidth函数可取的字符串的宽度,当然也可以取字符的宽度。
不过你的TextOut应该是TCanvas.TextOut,你没有说清楚,如果是API的
TextOut,请说明,我再告诉你。
 
得到字符的宽度最好用:
GetCharWidth函数,


Sample:
widths:array[0..255] of Integer;

GetCharWidth(Form1.Canvas.Handle,0,255,widths);

输出可使用ExtTextOut精确调整输出字符的间隔

例子来自《Delphi 3开发使用手册》P527
 
Here is a DEMO: (I forget Why I wrote it in 1997)

procedure TForm1.Button1Click(Sender: TObject);
var
dd:array[0..100] of Char;
PHdc:Hdc;
SZ:Tsize;
RGN1,RGN:HRgn;
begin


SetWindowRgn(Handle,RgnBack,True);

Phdc:=Form1.Canvas.Handle;
StrPcopy(dd,Edit1.Text);

SelectObject(Phdc,Label1.Font.Handle);
begin
path(PHdc);
TextOut(Phdc,0,0,@dd,length(dd));
Endpath(PHdc);

GetTextExtentPoint(Phdc,dd,length(dd),SZ);
RGN:=CreateRectRgn(0,0,SZ.Cx,SZ.Cy);
RGN1:=PathToRegion(Phdc);
CombineRgn(RGN,RGN,RGN1,RGN_Xor);

SetWindowRgn(handle,RGN,true);

form1.Clientwidth:=SZ.Cx;
Form1.ClientHeight:=SZ.CY;

end;
 
后退
顶部