如何得到EDIT字体的宽度?(20分)

  • 主题发起人 主题发起人 SYT
  • 开始时间 开始时间
S

SYT

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一段程序是需要根据EDIT中字符的长度来实时改变EDIT.width的宽
度,以便EDIT能够全部显示出EDIT.TEXT的内容,因此在下列事件中加入:
procedure TfrmMain.Edit1Change(Sender: TObject);
begin
Edit1.Width:=Length(Edit.text)*xxx;
end;
以上这段程序中XXX应为edit.font字体的宽度,但不知如何取得
EDIT.FONT的宽度。
 
请试试下面的代码:
xxx:=-font.height;
//因为汉字是方字所以,高等于宽。
注:已经过测试。
 
liuminghao:方法可以一试
 
>>已经过测试。

经过测试???你怎么测试的? 支持英文字符吗?

这是正解:
canvas.textwidth('大富翁123')
 
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=inttostr(-label1.Font.height);
edit2.Text:=inttostr(round(label1.width/strlen(pchar(label1.caption))));
end;
可以一试(英文字母和数字,不同的字体,不同的字母数字有不同的高宽比)。
 
canvas.textwidth是可写的,而edit.font.width在英文字母是不支持的,如大小写
其宽就不一样,不是吗?所以测试英文字母的宽是很烦(因而没有font.width一说)。
 
看看这个函数:
GetTextMetrics();
 
>>canvas.textwidth是可写的

什么意思??? 就用这个函数,有问题我负责.
 
cAkk:canvas.textwidth是“画”上去的,而tedit用字符串输出的,它们的width可
能是不同的.
 
Gettextmetrics()可能有些问题,我的观点是英文字母只有高没有宽,即高可以固定
而宽不行,如l,a其宽一样吗?所以应该没有现成的函数得到一个字母的宽。
 
liuminghao: 老兄,你试一试就知道了.
 
好!我一试便知。
 
谢谢!cAKK我又有新的收获, edit2.text:=inttostr(form1.canvas.textwidth(edit1.text));得到edit1.text字符串的长,所以我
建议:这个问题应该这样回答:
edit1.width:=form1.canvas.textwidth(edit1.text);如何?
 
cAkk:你不要发怒,听我讲过故事:
一次我家的邻居到我家来,见到我家新养了一只人家送的小鸡,他说:
这鸡一定活不十天。别人逗他,活过了十天什么办。他说:我负责。
大家乐了,赶紧说:不用不用。

he,hehe
开个玩笑,你的方法的确可以.
 
liuminghao:本应如此。
 
liuminghao: 难道我不是这么回答的吗?

sonie: 没发怒,我只是说说而已,真要我负责的时候,我早开溜了. 嘿嘿.:-P
 
agree cakk.
还有笨办法:
tlabel.aotosize:=true;
tlabel.font:=tedit.font;
tlabel.caption:=tedit.text;
tlabel.width-常数=text宽度
--------当然,只是逗大家一笑 :-)
 
可以发 EM_POSFROMCHAR 消息取得第一个与最后一个的位置,
然后相减,(可以在 edit 后加如一个字符)

该结束了。
 
>> edit1.width:=form1.canvas.textwidth(edit1.text);如何?
若edit中的字体与窗体中的不同,又怎样 ?
 
后退
顶部