为TListBox添加水平滚动条
为TListBox添加水平滚动条
实例说明
TListBox组件是一个较为常用的列表组件,在默认情况下该组件是没有水平滚动条的,所以文字过长会显示不完全,在文字较短的情况下还可以,但是如果一行的文字很长的话也不行。本例为TListBox添加了一个水平的滚动条,运行本程序单击【添加滚动条】按钮在TListBox组件中就会增加一个水平滚动条,运行效果如图1所示。

图1 为TListBox添加水平滚动条
思路与技术
在Windows中大部分窗口都具有滚动条,如果窗口被建立时没有让它具有滚动条特性的话,滚动条就不会被显示出来。Windows提供的消息LB_SETHORIZONTALEXTEND可以设置窗体的滚动条。因为TListBox也属于一种窗体,所以通过使用该消息同样可以设置TListBox的水平滚动条。
向TListBox组件发送该消息应使用SendMessage函数,当向TListBox组件发送LB_SETHORI ZONTALEXTEND消息时,SendMessage函数的参数wParam是水平滚动条的宽度。
SendMessage(listbox1.Handle
,lb_sethorizontalextent,100,0);
{ Listbox messages }
const
{$EXTERNALSYM
LB_ADDSTRING}
LB_ADDSTRING = $0180;
{$EXTERNALSYM
LB_INSERTSTRING}
LB_INSERTSTRING = $0181;
{$EXTERNALSYM
LB_DELETESTRING}
LB_DELETESTRING = $0182;
{$EXTERNALSYM
LB_SELITEMRANGEEX}
LB_SELITEMRANGEEX = $0183;
{$EXTERNALSYM
LB_RESETCONTENT}
LB_RESETCONTENT = $0184;
{$EXTERNALSYM
LB_SETSEL}
LB_SETSEL = $0185;
{$EXTERNALSYM
LB_SETCURSEL}
LB_SETCURSEL = $0186;
{$EXTERNALSYM
LB_GETSEL}
LB_GETSEL = $0187;
{$EXTERNALSYM
LB_GETCURSEL}
LB_GETCURSEL = $0188;
{$EXTERNALSYM
LB_GETTEXT}
LB_GETTEXT = $0189;
{$EXTERNALSYM
LB_GETTEXTLEN}
LB_GETTEXTLEN = $018A;
{$EXTERNALSYM
LB_GETCOUNT}
LB_GETCOUNT = $018B;
{$EXTERNALSYM
LB_SELECTSTRING}
LB_SELECTSTRING = $018C;
{$EXTERNALSYM
LB_DIR}
LB_DIR = $018D;
{$EXTERNALSYM
LB_GETTOPINDEX}
LB_GETTOPINDEX = $018E;
{$EXTERNALSYM
LB_FINDSTRING}
LB_FINDSTRING = $018F;
{$EXTERNALSYM
LB_GETSELCOUNT}
LB_GETSELCOUNT = $0190;
{$EXTERNALSYM
LB_GETSELITEMS}
LB_GETSELITEMS = $0191;
{$EXTERNALSYM
LB_SETTABSTOPS}
LB_SETTABSTOPS = $0192;
{$EXTERNALSYM
LB_GETHORIZONTALEXTENT}
LB_GETHORIZONTALEXTENT = $0193;
{$EXTERNALSYM LB_SETHORIZONTALEXTENT}
LB_SETHORIZONTALEXTENT = $0194;
{$EXTERNALSYM
LB_SETCOLUMNWIDTH}
LB_SETCOLUMNWIDTH = $0195;
{$EXTERNALSYM
LB_ADDFILE}
LB_ADDFILE = $0196;
{$EXTERNALSYM
LB_SETTOPINDEX}
LB_SETTOPINDEX = $0197;
{$EXTERNALSYM
LB_GETITEMRECT}
LB_GETITEMRECT = $0198;
{$EXTERNALSYM
LB_GETITEMDATA}
LB_GETITEMDATA = $0199;
{$EXTERNALSYM
LB_SETITEMDATA}
LB_SETITEMDATA = $019A;
{$EXTERNALSYM
LB_SELITEMRANGE}
LB_SELITEMRANGE = $019B;
{$EXTERNALSYM
LB_SETANCHORINDEX}
LB_SETANCHORINDEX = $019C;
{$EXTERNALSYM
LB_GETANCHORINDEX}
LB_GETANCHORINDEX = $019D;
{$EXTERNALSYM
LB_SETCARETINDEX}
LB_SETCARETINDEX = $019E;
{$EXTERNALSYM
LB_GETCARETINDEX}
LB_GETCARETINDEX = $019F;
{$EXTERNALSYM
LB_SETITEMHEIGHT}
LB_SETITEMHEIGHT = $01A0;
{$EXTERNALSYM
LB_GETITEMHEIGHT}
LB_GETITEMHEIGHT = $01A1;
{$EXTERNALSYM
LB_FINDSTRINGEXACT}
LB_FINDSTRINGEXACT = $01A2;
{$EXTERNALSYM
LB_SETLOCALE}
LB_SETLOCALE = $01A5;
{$EXTERNALSYM
LB_GETLOCALE}
LB_GETLOCALE = $01A6;
{$EXTERNALSYM
LB_SETCOUNT}
LB_SETCOUNT = $01A7;
{$EXTERNALSYM
LB_INITSTORAGE}
LB_INITSTORAGE = $01A8;
{$EXTERNALSYM
LB_ITEMFROMPOINT}
LB_ITEMFROMPOINT = $01A9;
{$EXTERNALSYM
LB_MSGMAX}
LB_MSGMAX = 432;
开发步骤
(1)新建一个标准工程,创建一个新窗体,默认主窗体的Name属性为Form1。
(2)在窗体中添加TGroupBox、TListBox和TButton组件。
(3)程序完整代码如下:
procedure TForm1.FormCreate(Sender:
TObject);
begin
ListBox1.Items.Add('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
end;
procedure TForm1.Button1Click(Sender:
TObject);
var
i,ItemWith:
integer;
begin
ItemWith:= 0;
for i := 0 to listbox1.Items.Count
- 1 do
if ItemWith <
listbox1.Canvas.TextWidth(listbox1.Items[i])then
ItemWith
:=
listbox1.Canvas.Textwidth(listbox1.Items[i]);
SendMessage(listbox1.Handle
,lb_sethorizontalextent,ItemWith,0);
end;
为TListBox添加水平滚动条的更多相关文章
- 为MFC中的ListBox添加水平滚动条
我们知道,MFC中的水平滚动条并不像垂直滚动条那样的智能.当文字超出ListBox的宽度时,水平滚动条并不会自己出现,我们需要手动的调用CListBox中的函数SetHorizontalExtent设 ...
- MFC中关于CListBox控件添加水平滚动条
首先是设置listbox控件的属性 Horizontal Scroll设为TRUE: 然后添加函数到CUighurRecognitionDlg.cpp(在CUighurRecognitionDlg. ...
- EasyUI combobox下拉框添加水平滚动条和垂直滚动条
在EasyUI中combobox组件设置滚动条: 1.垂直滚动条:设置panelHeight属性,默认200,组件的数据过多滚动条自动出现,设置auto,则不出现滚动条. 2.水平滚动条:水平滚动条在 ...
- 向table添加水平滚动条
转自:http://www.cnblogs.com/linjiqin/p/3148225.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...
- VB ListBox 添加横向滚动条
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal h ...
- winform水平滚动条联动panel
需求: 滚动滚动条时显示pnlBack里面的button 文本框里输入数字,改变每行显示的按钮数 源码如下: /// <summary> /// 窗体加载 /// </summary ...
- 关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条
关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条 关于<iframe>可以通过设置属性scrolling="no" 去掉iframe的两个滚动条. 如何只去掉水 ...
- java中JScrollPane不显示水平滚动条的解决办法
在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...
- 在word2010中添加带滚动条的文本框
由于文件内容过长,为了加强文章的可读性,可以添加一个带滚动条的文本框,既能使文章看起来干净整洁,同时也极大的提高了文章的可读性. 我这里对在word2010中文本框带滚动条作个介绍: 1. 打开wor ...
随机推荐
- hdu 2059(dp)
题意:容易理解... 思路:dp[i]表示乌龟到达第i个充电站时最少花费时间到第 i 个充电站后,从起点开始遍历到第 i-1 个充电站,得到最少花费时间 状态转移方程:dp[i]=min(dp[j]+ ...
- java web 学习十五(jsp基础语法)
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
- 火狐和google游览器的 hack独有识别 css
先来看google的: /* 这针对于webkit内核的游览器.包括苹果谷歌游览器等*/ @media screen and (-webkit-min-device-pixel-ratio:0) { ...
- HDU-3001 Travelling
http://acm.hdu.edu.cn/showproblem.php?pid=3001 从任何一个点出发,去到达所有的点,但每个点只能到达2次,使用的经费最小.三进制 Travelling Ti ...
- bzoj 1391 [Ceoi2008]order(最小割)
[题意] 有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个.问最大获益. [思路] 对于工作和机器建点 ...
- 多校5 1001 HDU5781 ATM Mechine 记忆化搜索+概率
// 多校5 1001 HDU5781 ATM Mechine // http://acm.hdu.edu.cn/search.php?field=problem&key=2016+Multi ...
- Some_sort_algorithms
复习下数据结构常用的排序算法,更多内容上wiki 快速排序(不稳定 O(n log n)) 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基 ...
- NodeJS:树的反序列化
!!不知问啥,cnblog的MarkDown编辑器不好使了. 本文也在我的博客edwardesire.com上,欢迎品尝. 树的反序列化就是将序列数组安装线索组成树结构,今次项目数据库存储决策节点的方 ...
- 分享一道我认为非常有思考价值JavaScript题目
这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对JavaScript是有一定的理解的了.我会先将题目的图片截取出来,供大家思考,在结尾在给出我的分析过程和答案,作个总结. 好,废话不 ...
- DataSnap与FireDAC三层
相交资料: http://blog.csdn.net/shuaihj/article/details/6129131http://www.cnblogs.com/hnxxcxg/p/4007876.h ...