combobox中下拉列表的宽度不够显示items项目(字符串)的问题 (分数可以再加) (200分)

  • 主题发起人 主题发起人 玄成
  • 开始时间 开始时间
to jsxjd:谢谢你的回答
但是,我试一下结果是,在length(S)>SL时item右对齐显示而已,并不会实现自适应宽度
的改变,也就是combobox的宽度并没有改变,只显示了右边那部分
我使用的是D5,这跟版本会不会有关系??
to hq_pan :再次感谢你的回答,我再试试看
 
to hq_pan:好像不行,我直接赋MaxWidth的值,然后发送消息,可下拉列表没有任何反应
并不会把滚动条显示出来(MaxWidth足够大)
 
算了算了,干脆在OnOwnerDraw里面让他超长的item自动换行显示的了
 
sorry! 我刚试了,的确是不行。
我记得以前曾经解决过这问题,但是代码已经丢了,当时还丢了很多
代码,现在想起来就气!
继续关注这个问题,我也试试看有没有其它的解决方法。
 
是不是想下拉框和组合框本身右齐??
下拉框在左边超宽。
 
to jsxjd:
是啊,就是希望能这样实现,不知道有没有什么办法??
to hq_pan:
还是谢谢你,幸好现在不是赶着要用,请大家再帮忙想想
to 一个过客:
换行的话,可能有的要换三.四行了,因为比原先预定的长出太多了
 
ComboBox 和下拉表没见过右齐,
我看只有重载消息 CBN_CLOSEUP.

当下拉和关闭时调整 left 和 width .
 
to jsxjd:
能不能讲一下具体的实现方法?
消息 CBN_CLOSEUP是在什么时候触发?


大家还有没有其它的解决方法???
 
我没有用过DEPHEL,但是有一个方法你可以试一下,就是根据当前光标处的内容,动态改变
ComboBox的提示。
 
//如下
procedure TForm1.FormCreate(Sender: TObject);
var
i, MaxWidth: integer;
begin
MaxWidth := 0;
for i := 0 to ComboBox1.Items.Count - 1 do
if MaxWidth < ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings) then
MaxWidth := ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings);
SendMessage(ComboBox1.Handle, CB_SETHORIZONTALEXTENT,MaxWidth+2 ,0 );
end;
 
不对,CB_SETHORIZONTALEXTENT 应该是:CB_SETDROPPEDWIDTH[:)]
 
to yyk518:
你说的是设置下拉框的宽度,麻烦你再看一下题目,谢谢
 
先改变下拉框的宽度然后把整个下拉框向左移动一定的位置,
这样不行吗?
 
to zswenyun:
我的想法就是这样的啊,关键是如何实现对combobox的下拉框进行移动??
 
其实最好的办法就是用Hint,当然指向某个Item时,出现Item全部内容的Hint,当然此Hint
的位置可以设置为屏幕居中(在当前位置超出屏幕时),好久没用了,具体做法也忘记了
 
TCombobox 是从TCustomComboBox继承的。
TCustomComboBox中有 EditHandle 和 ListHandle,
但是我通过 public 这两个属性后对它们进行发变位置的操作没有效果。
困为每次显示列表时,会重新调整列表的显示。
要想比较好地解决这个问题,好好研究TCustomComboBox。

从表面上看ListHandle应该是列表的句柄,能成功调整它的位置和大小就可以实现。
很可以要重载一下列表显示的过程。
 
我看了一下TCustomComboBox,真累,还是用hint算了
现在就给大家发分
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部