;----------------------------------------------------------------------------------------------------------------------
;	Funktion		_MoveAndMarkLVItem($hLV, $hGUI, $Skip)
;
;	Beschreibung	verschiebt alle markierten Einträge eines ListViewCtrl um eine Anzahl Positionen
;
;	Parameter		$hLV:	ListView ID
;					$hGUI:	GUI ID
;					$Skip:	Anzahl Zeilen um die die Einträge verschoben werden (negative Zahl - aufwärts)
;
;	Return			Erfolg:	-1
;					Fehler:  0	SetError	1 - GUI oder ListView nicht vorhanden
;											2 - Skip verweist auf Bereich außerhalb des ListViewIndex
;
;	Erfordernisse	#include <GuiListView.au3>
;					
;	Autor			BugFix (bugfix@autoit.de)
;----------------------------------------------------------------------------------------------------------------------
#include <GuiListView.au3>
Func _MoveAndMarkLVItem($hLV, $hGUI, $Skip)
	If (Not WinExists($hGUI)) Or (ControlGetHandle($hGUI, '', $hLV) = '') Then
		SetError(1)
		Return 0
	EndIf
	Local $arSelItems = _GUICtrlListViewGetSelectedIndices($hLV, 1)
	If $Skip < 0 Then
		For $i = 1 To $arSelItems[0]
			_MoveLVItem($arSelItems[$i], $Skip, $hLV)
			If @error Then
				SetError(2)
				Return 0
			EndIf
		Next
	Else
		For $i = $arSelItems[0] To 1 Step -1
			_MoveLVItem($arSelItems[$i], $Skip, $hLV)
			If @error Then
				SetError(2)
				Return 0
			EndIf
		Next
	EndIf
	GUISetState(@SW_LOCK, $hGUI)
	ControlClick($hGUI, '', $hLV)
	$idx = _GUICtrlListViewGetSelectedIndices($hLV, 0)
	Send("{UP " & $idx & "}") ; Auf Listenanfang
	For $i = 1 To $arSelItems[0]
		If $i = 1 Then 
			If $arSelItems[$i]+$Skip > 0 Then
				Send("{DOWN " & $arSelItems[$i]+$Skip & "}")
			EndIf
		Else
			Send("^{DOWN " & $arSelItems[$i]-$arSelItems[$i-1] & "}")
			Send("^{SPACE}")
		EndIf
	Next
	GUISetState(@SW_UNLOCK, $hGUI)
	Return -1
EndFunc ;==>_MoveAndMarkLVItem
;----------------------------------------------------------------------------------------------------------------------
;	Funktion		_MoveLVItem($ItemIndex, $StepWidth, $hLV)
;
;	Beschreibung	verschiebt per Index angegebenen Eintrag eines ListViewCtrl um eine Anzahl Positionen
;
;	Parameter		$ItemIndex:		Index der Zeile
;					$StepWidth:		Anzahl Zeilen um die der Eintrag verschoben wird (negative Zahl - aufwärts)
;					$hLV:			ListView ID
;
;	Erfordernisse	#include <GuiListView.au3>
;					
;	Autor			BugFix (bugfix@autoit.de)
;----------------------------------------------------------------------------------------------------------------------
Func _MoveLVItem($ItemIndex, $StepWidth, $hLV)
	If 	($ItemIndex + $StepWidth) < 0 Or _
		($ItemIndex + $StepWidth) > _GUICtrlListViewGetItemCount($hLV)-1 Then
		SetError(1)
		Return 0
	EndIf
	Local $txt2skip = _GUICtrlListViewGetItemText($hLV, $ItemIndex)
	If $StepWidth < 0 Then
		_GUICtrlListViewInsertItem($hLV, $ItemIndex + $StepWidth, $txt2skip)
		_GUICtrlListViewDeleteItem($hLV, $ItemIndex+1)
	Else
		_GUICtrlListViewInsertItem($hLV, $ItemIndex + $StepWidth+1, $txt2skip)
		_GUICtrlListViewDeleteItem($hLV, $ItemIndex)
	EndIf
	Return -1
EndFunc ;==>_MoveLVItem