如何得到字体的宽度。(30分)

  • 主题发起人 主题发起人 noall
  • 开始时间 开始时间
N

noall

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得到某一种字体的宽度。
 
function TCanvas.TextWidth(const Text: string): Integer;
Usage:
StringWidth := MainForm1.Canvas.TextWidth('Hello, world!');
 
这是字符串的宽度,不是字体的宽度。

 
字体的宽度? W 和 i 肯定不一样宽!
你的目的是?
 
请将问题描述再详细一点!!!
 
除非你是fixed字体,否则不同字符的宽度是不同的,比如M和i。
如果你的目的是取其中字符的最大宽度,可以参考以下函数:
代码:
function MaxCharWidth(C: TCanvas): Integer;
var
  Ch: Char;
  W: Integer;
begin
  Result := 0;
  for Ch := 'A' to 'Z' do
  begin
    W := C.TextWidth(Ch);
    if W > Result then
      Result := W;
  end;
end;
 
不同字体宽度不同,但我知道宋体的9P的每个字8个像素。
 
在TlogFont中有一个属性,lfwidth,和lfheigth的属性,是字体的宽度与高度,

那我们平时所用的字体的宽度是多少呢?其实就是lfwidth,lfheigth的值,

但我不知道应该什么求,

字体的宽度肯定是一样的,不管字符w与字符i是否一样。
 
你说的那个TLOGFONT.lfWidth是所谓的平均宽度,请看help
lfWidth
Specifies the average width, in logical units, of characters in the font.
If lfWidth is zero, the aspect ratio of the device is matched against the
digitization aspect ratio of the available fonts to find the closest match,
determined by the absolute value of the difference.

看你的意思,恐怕是想要这个东西吧:TEXTMETRICS
可以用GetTextMetrics取得。其中包括tmAveCharWidth、tmMaxCharWidth
和tmWeight三个与宽度有关的值,该有你要的东西了吧!
 
接受答案了.
 
后退
顶部