在IE的收藏菜单中,如果菜单项很多,超过屏幕高度的时候,在菜单两端会出现滚动箭头,当鼠标移到箭头上时,菜单会自动滚动.当菜单滚动到最末一行时,保持鼠标不动,按"下"方向键,使菜单重新回到第一行,这时,鼠标仍保持在菜单最末一行位置,而且滚动按钮也重新出现在鼠标下方.但这时菜单不会自动滚动, 除非重新动一下鼠标.即用键盘上的方向键移动在菜单上上下移动时,鼠标好像暂时失效,而一旦碰一下鼠标,鼠标又重新接管了菜单控制.我对这个比较纳闷,究竟是怎么实现的?

解决方案 »

  1.   

    可以在滚动到头以后关闭,然后在OnMouseMove里面触发滚动
      

  2.   

    我是通过spy查看菜单窗体,发现收藏菜单是由windows的common control系列中的ToolBarWindows32和Page Control两个控件构成的,对应到VCL中就是TToolBar和TPageScroller两个控件,我用这两个控件想模拟一下这菜单,已经分别实现了鼠标控制和键盘方向键控制,但是在用方向键控制时,如果鼠标仍停留在菜单末端(或顶端),即原先有箭头按钮的地方,用方向键继续移动,这时选定的菜单项会移到菜单顶部(或底部),但问题出现了,由于鼠标仍在原先箭头按钮的位置,TPageScroller会自动滚动,而IE中的菜单则会保持不动,除非你用手在碰一下鼠标.