Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
При перетаскиваний, или по кнопке?
Вот пример по кнопке:
Код: 
;Demo for _GUICtrlListView_MoveItems() function.
;Just select one (or more) item, and press one of the buttons (Up or Down).
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <SendMessage.au3>
;
$GUI = GUICreate('Demo for _GUICtrlListView_MoveItems()', 300, 320)
$Up_Button = GUICtrlCreateButton("Up", 20, 20, 24, 24, $BS_ICON)
GUICtrlSetImage(-1, "netcfgx.dll", 1, 0)
$Down_Button = GUICtrlCreateButton("Down", 70, 20, 24, 24, $BS_ICON)
GUICtrlSetImage(-1, "netcfgx.dll", -2, 0)
$ListView = _GUICtrlListView_Create($GUI, "Column1|Column2", 20, 50, 260, 250, _
BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), $WS_EX_CLIENTEDGE)
_GUICtrlListView_SetExtendedListViewStyle($ListView, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
$iImage_Size = 14
$hImage = _GUIImageList_Create($iImage_Size, $iImage_Size)
_GUIImageList_Add($hImage, _WinAPI_CreateSolidBitmap($ListView, 0xFF0000, $iImage_Size, $iImage_Size))
_GUIImageList_Add($hImage, _WinAPI_CreateSolidBitmap($ListView, 0x00FF00, $iImage_Size, $iImage_Size))
_GUIImageList_Add($hImage, _WinAPI_CreateSolidBitmap($ListView, 0x0000FF, $iImage_Size, $iImage_Size))
_GUICtrlListView_SetImageList($ListView, $hImage, 1)
For $i = 0 To 9
_GUICtrlListView_AddItem($ListView, "Item " & $i+1, Random(0, 2, 1))
_GUICtrlListView_AddSubItem($ListView, $i, "SubItem " & $i+1, 1, Random(0, 2, 1))
Next
$iRandom_1 = Random(0, 9, 1)
$iRandom_2 = Random(0, 9, 1)
_GUICtrlListView_SetItemChecked($ListView, $iRandom_1, 1)
_GUICtrlListView_SetItemSelected($ListView, $iRandom_1, 1)
_GUICtrlListView_SetItemChecked($ListView, $iRandom_2, 1)
_GUICtrlListView_SetItemSelected($ListView, $iRandom_2, 1)
_SendMessage($ListView, $LVM_SETCOLUMNWIDTH, 0, -1)
_SendMessage($ListView, $LVM_SETCOLUMNWIDTH, 1, -1)
ControlFocus($GUI, "", $ListView)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Up_Button
_GUICtrlListView_MoveItems($ListView, -1)
ControlFocus($GUI, "", $ListView)
Case $Down_Button
_GUICtrlListView_MoveItems($ListView, 1)
ControlFocus($GUI, "", $ListView)
EndSwitch
WEnd
;===============================================================================
; Function Name: _GUICtrlListView_MoveItems()
; Description: Moves Up or Down selected item(s) in ListView.
;
; Parameter(s): $hListView - ControlID or Handle of ListView control.
; $iDirection - Define in what direction item(s) will move:
; -1 - Move Up.
; 1 - Move Down.
;
; Requirement(s): AutoIt 3.3.0.0
;
; Return Value(s): On seccess - Move selected item(s) Up/Down and return 1.
; On failure - Return "" (empty string) and set @error as following:
; 1 - No selected item(s).
; 2 - $iDirection is wrong value (not 1 and not -1).
; 3 - Item(s) can not be moved, reached last/first item.
;
; Note(s): * If you select like 15-20 (or more) items, moving them can take a while :( (second or two).
;
; Author(s): G.Sandler a.k.a CreatoR
;===============================================================================
Func _GUICtrlListView_MoveItems($hListView, $iDirection)
Local $aSelected_Indices = _GUICtrlListView_GetSelectedIndices($hListView, 1)
If UBound($aSelected_Indices) < 2 Then Return SetError(1, 0, "")
If $iDirection <> 1 And $iDirection <> -1 Then Return SetError(2, 0, "")
Local $iTotal_Items = _GUICtrlListView_GetItemCount($hListView)
Local $iTotal_Columns = _GUICtrlListView_GetColumnCount($hListView)
Local $iUbound = UBound($aSelected_Indices)-1, $iNum = 1, $iStep = 1
Local $iCurrent_Index, $iUpDown_Index, $sCurrent_ItemText, $sUpDown_ItemText
Local $iCurrent_Index, $iCurrent_CheckedState, $iUpDown_CheckedState
Local $iImage_Current_Index, $iImage_UpDown_Index
If ($iDirection = -1 And $aSelected_Indices[1] = 0) Or _
($iDirection = 1 And $aSelected_Indices[$iUbound] = $iTotal_Items-1) Then Return SetError(3, 0, "")
ControlListView($hListView, "", "", "SelectClear")
If $iDirection = 1 Then
$iNum = $iUbound
$iUbound = 1
$iStep = -1
EndIf
For $i = $iNum To $iUbound Step $iStep
$iCurrent_Index = $aSelected_Indices[$i]
$iUpDown_Index = $aSelected_Indices[$i]+1
If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1
$iCurrent_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iCurrent_Index)
$iUpDown_CheckedState = _GUICtrlListView_GetItemChecked($hListView, $iUpDown_Index)
_GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)
For $j = 0 To $iTotal_Columns-1
$sCurrent_ItemText = _GUICtrlListView_GetItemText($hListView, $iCurrent_Index, $j)
$sUpDown_ItemText = _GUICtrlListView_GetItemText($hListView, $iUpDown_Index, $j)
If _GUICtrlListView_GetImageList($hListView, 1) <> 0 Then
$iImage_Current_Index = _GUICtrlListView_GetItemImage($hListView, $iCurrent_Index, $j)
$iImage_UpDown_Index = _GUICtrlListView_GetItemImage($hListView, $iUpDown_Index, $j)
_GUICtrlListView_SetItemImage($hListView, $iCurrent_Index, $iImage_UpDown_Index, $j)
_GUICtrlListView_SetItemImage($hListView, $iUpDown_Index, $iImage_Current_Index, $j)
EndIf
_GUICtrlListView_SetItemText($hListView, $iUpDown_Index, $sCurrent_ItemText, $j)
_GUICtrlListView_SetItemText($hListView, $iCurrent_Index, $sUpDown_ItemText, $j)
Next
_GUICtrlListView_SetItemChecked($hListView, $iUpDown_Index, $iCurrent_CheckedState)
_GUICtrlListView_SetItemChecked($hListView, $iCurrent_Index, $iUpDown_CheckedState)
_GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index, 0)
Next
For $i = 1 To UBound($aSelected_Indices)-1
$iUpDown_Index = $aSelected_Indices[$i]+1
If $iDirection = -1 Then $iUpDown_Index = $aSelected_Indices[$i]-1
_GUICtrlListView_SetItemSelected($hListView, $iUpDown_Index)
Next
Return 1
EndFunc
|