为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添加水平滚动条的更多相关文章

  1. 为MFC中的ListBox添加水平滚动条

    我们知道,MFC中的水平滚动条并不像垂直滚动条那样的智能.当文字超出ListBox的宽度时,水平滚动条并不会自己出现,我们需要手动的调用CListBox中的函数SetHorizontalExtent设 ...

  2. MFC中关于CListBox控件添加水平滚动条

    首先是设置listbox控件的属性  Horizontal Scroll设为TRUE: 然后添加函数到CUighurRecognitionDlg.cpp(在CUighurRecognitionDlg. ...

  3. EasyUI combobox下拉框添加水平滚动条和垂直滚动条

    在EasyUI中combobox组件设置滚动条: 1.垂直滚动条:设置panelHeight属性,默认200,组件的数据过多滚动条自动出现,设置auto,则不出现滚动条. 2.水平滚动条:水平滚动条在 ...

  4. 向table添加水平滚动条

    转自:http://www.cnblogs.com/linjiqin/p/3148225.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...

  5. VB ListBox 添加横向滚动条

    Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal h ...

  6. winform水平滚动条联动panel

    需求: 滚动滚动条时显示pnlBack里面的button 文本框里输入数字,改变每行显示的按钮数 源码如下: /// <summary> /// 窗体加载 /// </summary ...

  7. 关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条

    关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条 关于<iframe>可以通过设置属性scrolling="no" 去掉iframe的两个滚动条. 如何只去掉水 ...

  8. java中JScrollPane不显示水平滚动条的解决办法

    在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...

  9. 在word2010中添加带滚动条的文本框

    由于文件内容过长,为了加强文章的可读性,可以添加一个带滚动条的文本框,既能使文章看起来干净整洁,同时也极大的提高了文章的可读性. 我这里对在word2010中文本框带滚动条作个介绍: 1. 打开wor ...

随机推荐

  1. [转] C#操作EXCEL,生成图表的全面应用

    gailzhao 原文 关于C#操作EXCEL,生成图表的全面应用 近来我在开发一个运用C#生成EXCEL文档的程序,其中要根据数据生成相应的图表,该图表对颜色和格式都有严格的要求,在百度和谷歌中搜索 ...

  2. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  3. 用VBS脚本发邮件

    需求是这样的:针对账号的管理,如果发现该账号的管理员给账号加了批注,(比如要过期,修改密码,完善资料等),就需要找到这样的账号及其管理的邮件,然后发邮件给他们的管理员同时抄送给账号以达到提醒的目的.那 ...

  4. CSS、CSS2和CSS3选择器总结(全部选择器种类及其优先级)

    选择器种类罗列: 1.基础的选择器 选择器 含义 示例 * 通用元素选择器,匹配任何元素 * { margin:0; padding:0; } E 标签选择器,匹配所有使用E标签的元素 p { fon ...

  5. 找出图像I的代数中心

    function centerGPos = cenP(I ) %cenP finds the core of the PSF % [row, col] = find(I > ); minRow ...

  6. Azure终于支持大容量虚拟机了-最高32核,448G内存

    Azure终于支持大容量虚拟机了-最高32核,448G内存 最近微软Azure虚拟机旗下的大容量G系列虚拟机通用版本正式上线.G系列虚拟机方案提供公有云领域最大的内存容量.最强处理能力以及空间可观的本 ...

  7. PHP:PHP5.4连接SQLSERVER

    在PHP5.4的环境下要连接SQLSERVER(2005/2008)数据库,需要以下步骤: 1.下载PHP5.4连接SQLSERVER的驱动(两个动态连接库)http://www.microsoft. ...

  8. redis的lists类型

    List是一个链表结构 , 主要功能是push . pop .获取一个范围的所有值等等 , 操作中key理解为链表的名字 . redis 的 list类型其实就是一个每个子元素都是string类型的双 ...

  9. MYSQL event_scheduler

    一.概述  事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能.例如,Linux 中的 crontabe ...

  10. 第四次作业——WORDSEARCH小游戏

    “谁想出来的这么缺德的题目啊!!!!”一个声音在我心中回荡 这个题目很早就在课堂上公布了,我和我的小伙伴都惊呆了! 这是个毛?根本无从下手的感觉 总是觉得这个小游戏不是程序能给出答案的,因为我的第一印 ...