Here is what you are after. Note that you are going to have to figure out how to get the actual cursor you want....But that shouldn't be to difficult.
VB Code:
  1. Private m_ScrollClicked As Boolean = False  ' if the scroll wheel is down this is set to true
  2.     Private m_StartLocation As Point            ' this is the cursor position relative to the form when the scroll wheel is clicked
  3.  
  4.  
  5.     Private Sub ListView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
  6.         If e.Button = Windows.Forms.MouseButtons.Middle Then
  7.             m_ScrollClicked = True              ' the scroll wheel has been clicked
  8.             m_StartLocation = Windows.Forms.Cursor.Position     'set the position of where the scroll wheel was clicked
  9.             Windows.Forms.Cursor.Current = Cursors.HSplit       'change the cursor
  10.             Timer1.Start()                                      'star the timer
  11.         End If
  12.     End Sub
  13.  
  14.     Private Sub ListView1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseMove
  15.         If m_ScrollClicked = True Then                      'the cursor kept changing back to the default
  16.             Windows.Forms.Cursor.Current = Cursors.HSplit   'so reset it to your cursor when the mouse moves and the scroll is down
  17.         End If
  18.     End Sub
  19.  
  20.     Private Sub ListView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
  21.         m_ScrollClicked = False                             'when a mouse button goes up, I assume it is the middle
  22.         Windows.Forms.Cursor.Current = Cursors.Default      'change the cusor back to default
  23.         Timer1.Stop()                                       'stop the timer
  24.     End Sub
  25.  
  26.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  27.         'The timer is what actually moves the listview.  If the current y is less than the clicked you move up
  28.         'if the current y is greater than the clicked y you move down
  29.         Dim i As Integer = ListView1.Items.IndexOf(ListView1.TopItem) 'gets the index of the first item that can be seen
  30.         If m_ScrollClicked = True AndAlso Windows.Forms.Cursor.Position.Y < m_StartLocation.Y Then
  31.             If i > 0 Then   'if there is an item above it, change the top item to that
  32.                 ListView1.TopItem = ListView1.Items.Item(i - 1)
  33.             End If
  34.         ElseIf m_ScrollClicked = True AndAlso Windows.Forms.Cursor.Position.Y > m_StartLocation.Y Then
  35.             If i < ListView1.Items.Count - 1 Then   'if there is an item below it, change the item to that
  36.                 ListView1.TopItem = ListView1.Items.Item(i + 1)
  37.             End If
  38.         End If
  39.     End Sub

I had the timer set to 500 milliseconds, but you will want to play around with that until you get it moving how you want it to move. Also you can use this code to increase the speed as it gets farther away from the click point, by comming up with a formula to decrease the timer interval as it gets farther away, or by increasing the number of items it moves up or down during after each interval.