跟下面这一段差不多,去看看吧! procedure SetScrollBar(const Sender: TObject); var i, MaxWidth: integer; begin MaxWidth := 0; if (Sender is TListBox) then //为TListBox类设置滚动条 begin for i := 0 to (Sender as TListBox).Items.Count - 1 do if MaxWidth < (Sender as TListBox).Canvas.TextWidth((Sender as TListBox).Items.Strings[i]) then MaxWidth := (Sender as TListBox).Canvas.TextWidth((Sender as TListBox).Items.Strings[i]); SendMessage((Sender as TListBox).Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0); end else if (Sender is TCheckListBox) then //为TCheckListBox类设置滚动条 begin for i := 0 to (Sender as TCheckListBox).Items.Count - 1 do if MaxWidth < (Sender as TCheckListBox).Canvas.TextWidth((Sender as TCheckListBox).Items.Strings[i]) then MaxWidth := (Sender as TCheckListBox).Canvas.TextWidth((Sender as TCheckListBox).Items.Strings[i]); SendMessage((Sender as TCheckListBox).Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.ScrollWidth:=ListBox1.Width+1; end; 把ScrollWidth设置的比Width大就可以了
看看这样可以不?
procedure SetScrollBar(const Sender: TObject);
var
i, MaxWidth: integer;
begin
MaxWidth := 0;
if (Sender is TListBox) then //为TListBox类设置滚动条
begin
for i := 0 to (Sender as TListBox).Items.Count - 1 do
if MaxWidth < (Sender as TListBox).Canvas.TextWidth((Sender as TListBox).Items.Strings[i]) then
MaxWidth := (Sender as TListBox).Canvas.TextWidth((Sender as TListBox).Items.Strings[i]);
SendMessage((Sender as TListBox).Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end
else if (Sender is TCheckListBox) then //为TCheckListBox类设置滚动条
begin
for i := 0 to (Sender as TCheckListBox).Items.Count - 1 do
if MaxWidth < (Sender as TCheckListBox).Canvas.TextWidth((Sender as TCheckListBox).Items.Strings[i]) then
MaxWidth := (Sender as TCheckListBox).Canvas.TextWidth((Sender as TCheckListBox).Items.Strings[i]);
SendMessage((Sender as TCheckListBox).Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;
end;
begin
ListBox1.ScrollWidth:=ListBox1.Width+1;
end;
把ScrollWidth设置的比Width大就可以了