在给ComboBox增加了水平的滚动条之后,当Items.Cout很小时(比如2),出现了问题:
由于下拉框列表的高度并没有包含水平滚动条的高度,所以造成了列表中内容显示的不完整性,
请问该如何增加下拉列表的高度呢?在跟踪之后,发现Delphi中是如下实现的:
SetWindowPos(Handle, 0, 0, 0, Width, ItemHeight * ItemCount +
Height + 2, SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOREDRAW +
SWP_HIDEWINDOW);可是,决定高度的参数却只可以减小,不可以增大,即时给高度一个较大的值,而实际显示的
结果仍然是ItemHeight * ItemCount + Height + 3…………恳请各位鼎立相助,不胜感激!!!
由于下拉框列表的高度并没有包含水平滚动条的高度,所以造成了列表中内容显示的不完整性,
请问该如何增加下拉列表的高度呢?在跟踪之后,发现Delphi中是如下实现的:
SetWindowPos(Handle, 0, 0, 0, Width, ItemHeight * ItemCount +
Height + 2, SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOREDRAW +
SWP_HIDEWINDOW);可是,决定高度的参数却只可以减小,不可以增大,即时给高度一个较大的值,而实际显示的
结果仍然是ItemHeight * ItemCount + Height + 3…………恳请各位鼎立相助,不胜感激!!!
combobox1.items.add('');
这样做有可能会影响到程序中其他的地方,多出了一行,会牵扯到实际的应用,从而造成不必要的问题
并出现不可预期的bug谢谢你的支持
if combobox1.itemindex = combobox1.items.count - 1 then
combobox1.itemindex := combobox1.item.count - 2;
不知道这样可不可以。
使用SETDROPPEDWIDTH
Eg
procedrue Tform1.FormShow(Sender : Tobjects)
begin
comboBox1.Perform(CB_SETDROPPEDWIDTH, 100, 0);
end;
其中的100你可以用Combobox下拉中最大长度代替
解决问题.另外,为什么通过SetWindowPos来重置他的高度(大于标准高度)时会无效呢?难道有最大值
的限制吗?如果有,是delphi还是window改变的呢?
procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
// self.DropDownWidth(sender);
SendMessage(ComboBox1.handle,CB_SETITEMHEIGHT, 0, 30);
//30为Items之间的间隔
end;