★在网上找到的让listbox出现水平滚动条,哪位能改进一下?(50分)

  • 主题发起人 主题发起人 volcanosh
  • 开始时间 开始时间
V

volcanosh

Unregistered / Unconfirmed
GUEST, unregistred user!
listbox的字数多了以后不能完全显示
//判断listbox是否出现水平滚动条
MaxWidth := 0;
for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items.Strings) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items.Strings);
  
//原来是MaxWidth+2,后来发现字数多了无法显示完全,我改成120,后来字数再增加还是
//不能完全显示
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+300, 0);
 
在列表框中添加了列表项就要重新计算 MaxWidth
并发送下列消息。
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+300, 0);
^<<不需要这么大。
 
我是在一个for循环添加所有item后再sendmessage的,这不应该有错啊?
 
你根本不用改上面兄弟们说的数字。注意:
只要将ListBox1的字体设置成中文字体,就可以了。绝对好使。
这主要是因为ListBox1计算字符宽度时按你设置的字体来计算,由于你ListBox1中使用了
中文因此无法准确计算,无论你加多宽,都不合适,将ListBox1改为中文字体后,计算宽度
就安装中文字符计算了,因此就OK了。
 
不行,不以解决。我一直就用的gb2312,不行。
 
赫赫,你的是不是98呀?98下这个问题比较明显
这样,fChrWidth:=ListBox1.Canvas.TextWidth('A');
MaxWidth := 0;
for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth <length(ListBox1.Items.Strings) then
MaxWidth := length(ListBox1.Items.Strings);
maxwidth:=maxwidth*fchrwidth;
这个长度应该没有问题的
  
 
多人接受答案了。
 
twos的方法很好,直接取width有问题,用char来计算问题就解决 了,Thanks!
 
后退
顶部