请问:怎么样做才能使ComboBox的下拉框中有横向滚动条?(100分)

  • 主题发起人 主题发起人 泥瓦匠
  • 开始时间 开始时间
试试此方法吧:<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br>&nbsp; i,MaxWidth : Integer;<br>begin<br>&nbsp; MaxWidth := 0;<br>&nbsp; For i := 9 to ListBox1.Items.Count-1 do<br> if MaxWidth &lt; ListBox1.Canvas.TextWidth(ListBox1.Items.Strings) then<br>&nbsp; MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items.Strings);<br>&nbsp; SendMessage(ListBox1.Handle,LB_SETHORIZONTALEXTENT,MaxWidth+2,0);<br>end;<br>
 
给你个控件infopower V2000.14 for d45<br>从http://go18.163.com/~hua8hua/delphi/下载,你一定会满意!
 
上面的方法不行吧
 
xlf 的方法是针对于 ListBox 的。<br>ComboBox 内部确实是包含了一个 ListBox ,但是该 ListBox 是在创建 ComboBox 时默认<br>创建的,没有加入 WS_HSCROLL 参数,而且也没有办法重载这个隐含的 ListBox 的构造<br>函数,所以我认为,一般的办法是做不到的。
 
我只相对Combobox进行修改,不想用第三方控件。既然“该 ListBox 是在创建 ComboBox 时默认<br>创建的,没有加入 WS_HSCROLL 参数,而且也没有办法重载这个隐含的 ListBox 的构造<br>函数”,那我们能不能通过修改Combobox的PAS源代码的方法来实现?<br>BTW:用WIN32帮助中有<br>An application sends the CB_SETHORIZONTALEXTENT message to set the width,<br>in pixels, by which a list box can be scrolled horizontally (the scrollable<br>&nbsp;width). If the width of the list box is smaller than this value,<br>&nbsp;the horizontal scroll bar horizontally scrolls items in the list box. <br>If the width of the list box is equal to or greater than this value, <br>the horizontal scroll bar is hidden or, if the combo box has the <br>CBS_DISABLENOSCROLL style, disabled.<br><br>CB_SETHORIZONTALEXTENT &nbsp;<br>wParam = (WPARAM) cxExtent; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// scrollable width of list box, in pixels <br>lParam = 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// not used, must be zero <br>Parameters<br>&nbsp; cxExtent<br>&nbsp; Specifies the scrollable width of the list box, in pixels.<br>Return Values<br>&nbsp; No return value.<br><br>可是我没有试出来。
 
&nbsp;ComboBox 是 Windows 标准控件,VCL 源代码里也没有重写它,仅仅是加了一个包装外壳<br>而已,也就是说这个隐含的 ListBox 是在 .DLL 的代码里创建的,用一般的办法没法重载。<br>&nbsp; 关键是找出这个隐含的 ListBox 的句柄(HWnd),这样,即使创建时没有指定的属性,在<br>后来也可以用 SetWindowLong 来设置。TCustomComboBox 有一个 ListHandle ,好像是这个<br>东西,但是我在测试中它总是 0 ,不知道为什么,所以没办法。
 
自己做可能已经搞定了!
 
我想做:如果combobox中的长度超过combobox的宽度时能不能在光标停上时<br>出现一个体示条,内容就是它的内容。
 
泥瓦匠:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。<br>
 
多人接受答案了。
 
后退
顶部