'以下在Form 需一个ListBox, MultiSelect = 0
Option Explicit
Dim rect5 As RECT
Dim hldc As Long, hPen As Long, hBrush As Long
Dim FirstIndex As Long, ntx As Long, ntxStr As String
Private Sub Form_Load()
hPen = CreatePen(0, 1, RGB(0, 0, 0)) '设定黑色线
hBrush = GetStockObject(NULL_BRUSH) '设定中空显示
hldc = GetDC(List1.hwnd)
Call SelectObject(hldc, hPen)
Call SelectObject(hldc, hBrush)
List1.Clear
List1.AddItem "111111111"
List1.AddItem "222222222"
List1.AddItem "333333333"
List1.AddItem "444444444"
List1.AddItem "555555555"
List1.AddItem "666666666"
List1.AddItem "777777777"
List1.AddItem "888888888"
List1.AddItem "999999999"
List1.AddItem "AAAAAAAAA"
List1.AddItem "BBBBBBBBB"
List1.AddItem "CCCCCCCCC"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
i = DeleteObject(hPen)
i = ReleaseDC(List1.hwnd, hldc)
End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'取得List1.ListIndex所在Item的位置
Call SendMessage(List1.hwnd, LB_GETITEMRECT, List1.ListIndex, rect5)
FirstIndex = List1.TopIndex '目前ListBox最上面那个Item的注标
ntx = List1.ListIndex
ntxStr = List1.List(ntx)
List1.MousePointer = 15
End Sub
Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
If FirstIndex = List1.TopIndex Then '当ListBox没有Scroll时则重画榘形
Call Rectangle(hldc, rect5.Left, rect5.Top, rect5.Right, rect5.Bottom)
Else '否则重新取得待Move的Item之新位置
Call SendMessage(List1.hwnd, LB_GETITEMRECT, ntx, rect5)
FirstIndex = List1.TopIndex
End If
End If
End Sub
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Refresh '清除方才画上的榘形
If List1.ListIndex <> ntx And List1.ListIndex <> -1 Then
'新增项目於新的位置,并将原本位置的项目删除
List1.AddItem ntxStr, List1.ListIndex
If List1.ListIndex > ntx Then
List1.RemoveItem ntx
Else '因项目往上移动,已新增了一个项目了,故原本记录的ntx位置也要加一
List1.RemoveItem ntx + 1
End If
List1.ListIndex = List1.ListIndex - 1 '指到已Move完毕的Item
End If
List1.MousePointer = 0
End Sub
|