如何在Delphi中设置ComboBox的列表框部分的选项卡宽度

时间:2010-02-19 11:41:37

标签: delphi combobox vcl

通过设置TListbox的TabWidth属性,您可以轻松地在列表框中实现多列效果。例如,http://delphi.about.com/cs/adptips2000/a/bltip1200_3.htm

我需要在ComboBox的下拉列表中执行相同操作,但组合框不会发布任何TabWidth属性。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在对this answer的评论中,建议您自己绘制列表框项目:

  

我想知道为什么在列表框中已经存在所需功能时必须这样做

组合框实际上由三个本机子窗口组成 - 组合框本身,嵌入式编辑和列表框。您可以使用GetComboBoxInfo()函数填充COMBOBOXINFO结构(即TComboBoxInfo记录),其中包含有关控件的信息,并返回其中的3个HWND元素。通过它,您可以更改列表框的外观和行为。原则上。

要使用制表位的列表框,需要设置LBS_USETABSTOPS样式标志。不幸的是,以后无法打开,必须使用它创建列表框。因此,只有在能够打开列表框的样式标志时才能使用该功能,该列表框是在组合框的CreateWindowEx()调用期间创建的。 AFAICS这只能通过挂钩CreateWindowEx()调用本身,识别创建列表框的内部调用,以及更改传递的样式来完成。这意味着运行时修改代码,而不是在可执行文件中,而是在Windows DLL中。

所有者 - 绘制列表项看起来会更容易。

答案 1 :(得分:0)

据我所知,这里的TabWidth方法并不那么简单,但您可以覆盖Paint方法并自行绘制。查看列表框和组合框源可能有所帮助。