自动做吧老弟,响应TREEVIEW中的鼠标事件,判断当前位置,然后决定该上滚还是下滚.

解决方案 »

  1.   

    也只有这样做了
    估计不会太难吧
    要用到
    onmousedown() onmouseover() onmousemove() 三个事件
      

  2.   

    响应CM_MOUSEENTER消息取得鼠标进入TreeView时的位置,然后再WM_MOUSEMOVE消息中处理鼠标移动的位置,向滚动条发送WM_VSCROLL和WM_HSCROLL消息,完成滚动
      

  3.   

    这样不好吧?进去就动还怎么选内容?比手快吗?
    建议作成这样:在 TreeView 里按下右键(或别的按键或键盘热键)时,再跟着鼠标动。
      

  4.   

    检查了热键后作滚动时用 playpcgame 的方法好一点。
      

  5.   

    playpcgame大哥,您具体点吧。我很笨。:)     
      

  6.   

    下面是我的想法,也不见得可以成功:
    1.从TTreeView继承,创建一个新的控件TScrollTreeView
    2.处理TScrollTreeView的CM_MOUSEENTER消息,这是一个VCL的内部消息。在这个消息中记录鼠标进入到TScrollTreeView时的X,Y位置(GetCursorPos,ScreenToClient)
    3.鼠标在TScrollTreeView中移动是,计算鼠标移动的偏移距离,然后向TScrollTreeView发送
    WM_VSCROLL和WM_HSCROLL消息.模拟滚动条的滚动。
      

  7.   

    在 TTreeView 的 OnMouseDown 事件中加入一下代码  if Y > TreeView1.Height - 10 then
        PostMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0)
      else if Y < 10 then
        PostMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEUP, 0)