又要花钱了,关于LISTBOX(100分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
老板要一个ListBox,需要它的Highlight的那行是根据鼠标
的当前位置变的,就象鼠标在MENU上移动,HIGHLIGHT跟着移动
一样。

这个我是做到了,但有个问题,当HIGHLIGHT的那一行是在LISTBOX
显示区域的最下一行时,怎么能让LISTBOX能自动SCROLLUP?在鼠标
到了LISTBOX显示区域的最上一行时,怎么能让LISTBOX自动的SCROLLDOWN?

我想,这涉及两个问题:
一、判断当前行是显示区域的第一行或最下一行
二、SCROLLUP、SCROLLDOWN。

谢谢。唉,很快就要变成穷鬼了……
 
上滚一行listbox1.topindex:=listbox1.topindex-1;
下滚一行listbox1.topindex:=listbox1.topindex+1;
判断当前行是第一行,if listbox1.selected.itemindex:=listbox1.topindex
则是第一行。
if listbox1.bottom-mouse.y<listbox.itemheight,则是最后一行。
 
ScrollUP:
Listbox.ItemIndex:=Listbox.ItemIndex-1;

ScrollDown:
Listbox.ItemIndex:=Listbox.ItemIndex+1;
 
不是有意抢分,我还在写测试程序时,Hubdog已经给出真确答案了。 {B-(
 
一、判断当前行是显示区域的第一行或最下一行
if SendMessage(ListBox1.Handle, LB_GETTOPINDEX, 0, 0) = 当前行的Index then 是显示区域的第一行

var
ARect: TRect;
SendMessage(ListBox1.Handle, LB_GETITEMRECT, 当前行的Index, Integer(@ARect));

if ARect.Top >= ListBox1.Height - ListBox1.ItemHeight then
是显示区域的最下一行
 
我也不是有意要来分一杯羹的, 我明明是第一个进来的, 呜呜呜...

二、SCROLLUP、SCROLLDOWN。
SCROLLDOWN:
SendMessage(ListBox1.Handle, LB_SETCURSEL, ListBox1.ItemIndex + 1, 0);

SCROLLUP:
SendMessage(ListBox1.Handle, LB_SETCURSEL, ListBox1.ItemIndex - 1, 0);
 
Hi all, thanks, I got it.
Question will be close 8 hour latter
 
唉,狼多肉少啊,就这一百分,还要分三人,不成敬意。
 
多人接受答案了。
 
后退
顶部