通过设置TListbox的TabWidth属性,可以轻松实现列表框中的多列效果。例如,http://delphi.about.com/cs/adptips2000/a/bltip1200_3.htm如何在Delphi中设置TComboBox的列表框部分的表格宽度
我需要在ComboBox的下拉列表中执行相同的操作,但组合框不会发布任何TabWidth属性。
任何想法?
通过设置TListbox的TabWidth属性,可以轻松实现列表框中的多列效果。例如,http://delphi.about.com/cs/adptips2000/a/bltip1200_3.htm如何在Delphi中设置TComboBox的列表框部分的表格宽度
我需要在ComboBox的下拉列表中执行相同的操作,但组合框不会发布任何TabWidth属性。
任何想法?
在以this answer评论你建议业主绘制列表框中的项目你说:
我不知道为什么我必须做的是,当需要的功能在列表框已经存在
组合框实际上由三个本地子窗口组成 - 组合框本身,嵌入式编辑和列表框。您可以使用GetComboBoxInfo()
函数来填充COMBOBOXINFO
结构(即TComboBoxInfo
记录)和有关该控件的信息,并将返回其中的3个HWND
元素。这样你就可以改变列表框的外观和行为。原则上。
对于要使用制表位的列表框,需要设置LBS_USETABSTOPS
样式标志。不幸的是,这不能在以后打开,列表框必须与它一起创建。因此,只有当您可以打开列表框中的样式标志时才可以使用该功能,该列表框在组合框的CreateWindowEx()
调用期间创建。 AFAICS只能通过挂接CreateWindowEx()
调用本身,识别创建列表框的内部调用以及更改传递的样式来完成。这意味着代码的运行时修改,而不是在您的可执行文件中,但在Windows DLL中。
所有者绘制列表项看起来会更容易。
从我所知道的有没有这么简单的方式,这里TabWidth
,但你可以覆盖Paint
方法,并自己画。查看列表框和组合框可能会有所帮助。
我认为OnDrawItem方法会更有用 – SimaWB 2010-02-19 12:52:07
我想知道为什么当必需的功能已经存在于列表框上时我必须这样做。 – 2010-02-19 14:56:26
感谢您的完整和详细的解释,完全解答我的问题。然而,做这件事太费事了。 – 2010-02-21 19:28:45