试一试给ListBox发一条消息LB_SETHORIZONTALEXTENT
解决方案 »
- 哪里出错?
- 关于 SendMessage 使用的问题(在Text1中,转到指定行、设置光标位置、返回光标位置、获得光标所在行的位置)
- 求运行时显示 ocx 控件的属性页的方法
- 紧急求助: 我在vb6中引用Messenger API Type Library,MSN已安装,运行却报ActiveX不能创建?
- 请教各位大哥大姐用vb如何做证券市场中的k线图?(讨论)
- 问:在VB6.0企业版中,TRIM()和FORMAT()函数为什么不好用?
- 如何刷新datagrid?
- 为什么啊 ie7 页签 永远 白板
- 关于一个OUTLOOK样式工具条控件的问题
- 怎么样使Treeview得子节点折行显示?
- 急! 求教VB 6中MP3 播放
- 请教如何在vb6.0中实现动态打印功能
必须要使用GetWINDOWLong和SetWindowLong来设置LIST的风格之中有一个
WS_HSCROLL;
这样才能响应LB_SETHORIZONTALEXTENT消息。
2.用MSFlexGrid代替listbox。将内容拆开成n个字符一组,放入MSFlexGrid,去掉网格线。
先建立一个新模块,然后使用API文本查看器拷贝一个关于Sendmessage的声明,和一个LB_SETHORIZONTALEXTENT常量的声明,粘贴到模块中,
在表单的ONLOAD事件里,写以下代码:
dim i as long
sendmessage(list1.hwnd,LB_SETHORIZONTALEXTENT,list1.width+1,0)
要显式说明设置的滚动条宽度比列表框宽,水平滚动条会显示出来,否则水平滚动条会消失。
//请参考下面的DELPHI程序,把它改成VB格式即可
procedure TForm1.Button1Click(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[i]) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items[i]);
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;