可否在TListBox中添加水平滚动条?(200分)

  • 主题发起人 主题发起人 luojianfd
  • 开始时间 开始时间
L

luojianfd

Unregistered / Unconfirmed
GUEST, unregistred user!
由于在TListBox中动态添加Items,所以经常添加的条目显示不全,
不知可否在TListBox中添加水平滚动条?
 
Hubdog的葵花宝典
在你的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;
 
procedure TfrmTechListPreview.SetListBoxHorBar(lst:TListBox);
var i,MaxWidth:integer;
begin
; MaxWidth:=0;

; for i:=0 to lst.Items.Count-1 do
; ; if MaxWidth<lst.Canvas.TextWidth(lst.Items.Strings) then
; ; ; MaxWidth:=lst.Canvas.TextWidth(lst.Items.Strings);
; if MaxWidth>lst.Width then
; ;SendMessage(lst.Handle, LB_SETHORIZONTALEXTENT, MaxWidth, 0)
end;
 
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个点的边。
 
多人接受答案了。
 

Similar threads

回复
0
查看
819
不得闲
D
回复
0
查看
842
DelphiTeacher的专栏
D
D
回复
0
查看
848
DelphiTeacher的专栏
D
后退
顶部