如何获得不同字体不同字数的文本的宽度?(100分)

  • 主题发起人 主题发起人 xiaoer
  • 开始时间 开始时间
X

xiaoer

Unregistered / Unconfirmed
GUEST, unregistred user!
比如“科技园”三个字,当它的字体不同时,显示在屏幕上的宽度也会不同。
开始我以为每个汉字16点,就用
Length('科技园')*16
但试了才知道不行。
 
其实字体的宽度你可以自己通过设定字体的大小来定义,
下面是字体高度和象素数/英寸的转换:
Font.Height = -Font.Size * Font.PixelsPerInch / 72
 
这个可以获得字体的高度,但还要考虑到中文字和英文字,还有字之间的间距。
中文字和英文字是Unicode的问题,
字之间的间距是什么回事啊。
 
TCanvas.Font
TCanvas.TextWidth
详见Delphi的帮助,我就不多说了。
 
[:)]TCanvas.TextWidth(s: String): integer;
设置TCanvas.Font就可以通过该函数获得字符串的宽度
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Name :='宋体';
Edit1.Text :=IntToStr(Canvas.TextWidth('科技园'));
end;

^_^
 
楼上们写的一个比一个具体,精神真好呀!
看来我也要学习学习了。
(用得着吗?有说明就行了,不用动不动就把贴代码贴出来。我没有写,是因为Delphi的帮助里有Example)

Font.Size
TCanvas.TextHeight
 
API最好呀,看你用来做什么。标准用法:
1.计算字符在某个Rect中的净高度和净宽度:
DrawText(Canvas.Handle, '汉字', 4, Rect, DT_CALCRECT)
2.计算在何处断行:
GetTextExtendExPoint(Canvas.Handle, PStart, N, MaxWidth, @MaxW, nil, ASize);

有关参数查查MS SDK Manual
 
感谢“卷起千堆雪tyn”的热心回答,由于其他人说的也对,所以就只能给你50分了。
谢谢大家!
对于barton的回答我没有试,因为在Delphi中用API我不是很熟。
 
后退
顶部