怎样为TListBox加一个横向的滚动条?(100分)

  • 主题发起人 主题发起人 Chalaw
  • 开始时间 开始时间
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个点的边。



Tips来源:The Cobb Group's Delphi Developer's Journal


 
哎呀,晚了,补充一点吧。
MaxWidth+2似乎不够,我用的时候加了50
 
别那么痛苦,在理解的基础上要善于利用第三方控件,
在RXLIB 2.75中就一个这样的控件,显示正确,包你满意。
RXLIB到处都可以下载。
 
只用控件的话,也行,但你得知道它是怎么做的。
自己动手,丰衣足食。
 
接受答案了.
 
后退
顶部