如何给Listbox加水平滚动条(D3.0)(50分)

  • 主题发起人 主题发起人 wsn
  • 开始时间 开始时间
W

wsn

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi 3.0 中Listbox只有垂直滚动条,
如何给Listbox加水平滚动条?
 
Delphi 的 TListBox元件自动实现了垂直的滚动条,当ListBox不能显示全部的菜单(Item)时,这个垂直的滚动条就会出现。然而,当菜单的宽度比ListBox宽时水平的滚动条却不会出现。以下的程序就是处理这个问题的。

在你的Form的OnCreate事件中添加以下代码:
procedure TForm1.FormCreate(Sender: TObject);
var
i, MaxWidth: integer;
begin
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);

SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;

以上的代码首先得到ListBox中最长Item的长度,然后用LB_SETHORIZONTALEXTENT消息设置ListBox的水平滚动的宽度,宽度加2是为了给右面留2个点的边。

 
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 0, 0);
 
huptwqs你好你提供的这个程序我以前就曾用过,但没有出现水平滚动条,
怎么办呢?
 
hubdog的对
 
huddog 的没错,好象是一本书上的,我用过,绝对能用!
 
《Delphi使用技术精粹》是这本吧
 
我今天试了一下,怎么开始可以,但后来就不行了,不知为什么??真奇怪!!
 
该说的别人已经说了,但我建议你使用RXLIB控件,其中就有一个你要求的东东
 
lisbox的垂直水平滚动条的存在与否(由于其宽度)对其水平滚动条的出现有怎么样的影响?仅用上面的代码好像对这个问题解决的不是很好。
 
用STRINGGRID,把边去掉简直和LISTBOX一模一样。
至少我经常这么干,试试看
 
后退
顶部