#include-once #include #include #include #include #include #include #include "_ArrayEx.au3" #include "_GUIRegisterMsg.au3" Global $treeView_Items[1][3] Global $treeView_NoDrag[0] ;=============================================================================== ; Nom: _GUICtrlXView_EnableDrag() ; Description: Active / désactive l'affichage du petit "+" lors d'un drag&drop sur un élément de la listview ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $enable : Position du graphique dans la fenetre (abssices) ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_EnableDrag($hwnd, $enable = True) If(Not(IsHWnd($hwnd))) Then $hwnd = GUICtrlGetHandle($hwnd) EndIf Local $id = _Array_Find1D($treeView_NoDrag, $hwnd) If($id >= 0) Then If($enable) Then _Array_Delete($treeView_NoDrag, $id) EndIf Else If(Not($enable)) Then _Array_Add($treeView_NoDrag, $hwnd) EndIf EndIf EndFunc ;=============================================================================== ; Nom: _GUICtrlXView_SetOnEvent() ; Description: Associe un évenement fait sur une (list/tree)view à une fonction ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $func : Fonction appellée lors de la détection de l'évenement (Doit être de la forme : Func foncion($hwnd, $event) ; $event : Évenement à surveiller ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlXView_SetOnEvent($hwnd, $func, $event) If($func = "") Then _GUICtrlXView_UnsetOnEvent($hwnd, $func, $event) EndIf If(Not(IsHWnd($hWnd))) Then $hwnd = GUICtrlGetHandle($hwnd) EndIf If($hwnd = 0) Then Return SetError(1, 0, False) EndIf Local $index = __GetItemsByHwndAndFunc($hwnd, $func) Local $tabEvent[1] = [$event] If($index = -1) Then $index = UBound($treeView_Items, 1)-1 $treeView_Items[$index][0] = $hwnd $treeView_Items[$index][1] = $func $treeView_Items[$index][2] = $tabEvent If($index = 0) Then _GUIRegisterMsg($WM_NOTIFY, "__Func_XViewNotify") EndIf ReDim $treeView_Items[UBound($treeView_Items, 1)+1][UBound($treeView_Items, 2)] Else $tabEvent = $treeView_Items[$index][2] If(_Array_Find1D($tabEvent, $event) = -1) Then ReDim $tabEvent[UBound($tabEvent, 1)+1] $tabEvent[UBound($tabEvent, 1)-1] = $event $treeView_Items[$index][2] = $tabEvent EndIf ReDim $treeView_Items[UBound($treeView_Items, 1)+1][UBound($treeView_Items, 2)] EndIf EndFunc ;=============================================================================== ; Nom: _GUICtrlXView_UnsetOnEvent() ; Description: Annule un _GUICtrlXView_SetOnEvent() ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $func : Fonction qui était appellée lors de la détection de l'évenement ; $event : Évenement à ne plus surveiller ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlXView_UnsetOnEvent($hwnd, $func, $event) If(Not(IsHWnd($hWnd))) Then $hwnd = GUICtrlGetHandle($hwnd) EndIf If($hwnd = 0) Then Return SetError(1, 0, False) EndIf Local $index = __GetItemsByHwndAndEvent($hwnd, $event) If($index >= 0) Then Local $tabEvent = $treeView_Items[$index][2] Local $indice = _Array_Find1D($tabEvent, $event) _Array_Delete($tabEvent, $indice) $treeView_Items[$index][2] = $tabEvent EndIf EndFunc ;=============================================================================== ; Nom: _GUICtrlListView_GetSelectedIndice() ; Description: Retourne le 1er élément sélectionné ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $func : Fonction qui était appellée lors de la détection de l'évenement ; $event : Évenement à ne plus surveiller ; ; Retour : succes : Le 1er élément sélectionné ; fail : -1 ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_GetSelectedIndice($hWnd, $fArray = False) Local $indice = -1 Local $indices = _GUICtrlListView_GetSelectedIndices($hWnd, True) Local $array[2] = [1, 0] Local $retour If($indices[0] > 0) Then $indice = $indices[1] EndIf $retour = $indice If($fArray) Then $array[1] = $indice $retour = $array EndIf Return $retour EndFunc Func __Func_XViewNotify($hWnd, $msg, $wParam, $lParam) Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam) Local $iEvent = DllStructGetData($tNMHDR, "Code") Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) Local $cible If(__IsXViewIndiceByHwnd($hWndFrom)) Then ;~ $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $cible = __GetItemsByTView($hWndFrom) If(UBound($cible, 1) > 0) Then For $i = 0 To UBound($cible, 1)-1 Local $tabEvent = $treeView_Items[$cible[$i]][2] For $j = 0 To UBound($tabEvent, 1)-1 If($iEvent = $tabEvent[$j]) Then ;~ ConsoleWrite($iCode & " = " & $tabEvent[$j] & @CRLF) Call($treeView_Items[$cible[$i]][1], $hWndFrom, $iEvent) EndIf Next Next EndIf EndIf $cible = _Array_Find1D($treeView_NoDrag, $hWndFrom) If($iEvent = $LVN_BEGINDRAG And $cible >= 0) Then Return 1 EndIf Return $GUI_RUNDEFMSG EndFunc Func __GetItemsByHwndAndEvent($hwnd, $event) Local $retour = -1 For $i = 0 To UBound($treeView_Items, 1)-2 If($treeView_Items[$i][0] = $hwnd) Then Local $tabEvent = $treeView_Items[$i][2] For $j = 0 To UBound($tabEvent, 1)-1 If($tabEvent[$j] = $event) Then $retour = $i ExitLoop 2 EndIf Next EndIf Next Return $retour EndFunc Func __GetItemsByHwndAndFunc($hwnd, $func) Local $retour = -1 For $i = 0 To UBound($treeView_Items, 1)-2 If($treeView_Items[$i][0] = $hwnd And $treeView_Items[$i][1] = $func) Then $retour = $i ExitLoop EndIf Next Return $retour EndFunc Func __GetItemsByTView($hwnd) Local $retour[0] For $i = 0 To UBound($treeView_Items, 1)-2 If($treeView_Items[$i][0] = $hwnd) Then _Array_Add($retour, $i) EndIf Next Return $retour EndFunc Func __IsXViewIndiceByHwnd($hWnd) Local $retour = False For $i = 0 To UBound($treeView_Items, 1)-2 If($treeView_Items[$i][0] = $hwnd) Then $retour = True ExitLoop EndIf Next Return $retour EndFunc ;=============================================================================== ; Nom: _GUICtrlListView_GetExtractColonne() ; Description: Extrait les textes d'une colone d'une liste d'index d'items ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $items : La liste des index à extraire ou (-1 : tous les items / -2 : items selectionnés) ; ; Retour : succes : les textes de la colone de la liste d'index d'items ; fail : Un tableau vide ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_GetExtractColonne($hwnd, $items = -1, $colonne = 0) Local $retour[0] Local $count = _GUICtrlListView_GetItemCount($hwnd) If($items = -1 And $count > 0) Then ReDim $retour[$count] $items = $retour For $i = 0 To $count-1 $items[$i] = $i Next ElseIf($items = -2) Then $items = _GUICtrlListView_GetSelectedIndices($hwnd, True) _Array_Delete($items, 0) ElseIf(Not(IsArray($items))) Then Local $array[1] = [$items] $items = $array EndIf If(UBound($items, 1) > 0) Then ReDim $retour[UBound($items, 1)] For $i = 0 To UBound($items, 1)-1 $retour[$i] = _GUICtrlListView_GetItemText($hwnd, $items[$i], $colonne) Next EndIf Return $retour EndFunc ;=============================================================================== ; Nom: _GUICtrlListView_GetIndexByColumn() ; Description: Retourne les indexes dont le texte de la colonne $colonne correspond à $search ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $search : Texte à rechercher ; $colonne : Numéro de la colonne à rechercher ; ; Retour : succes : les indexes correspondant à la recherche ; fail : Un tableau vide ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_GetIndexByColumn($hwnd, $search = "", $colonne = 0) Local $retour[0] Local $count = _GUICtrlListView_GetItemCount($hwnd) If($count > 0) Then Local $itemText For $i = 0 To $count $itemText = _GUICtrlListView_GetItemText($hwnd, $i, $colonne) If($itemText = $search) Then _Array_Add($retour, $i) EndIf Next EndIf Return $retour EndFunc ;=============================================================================== ; Nom: _GUICtrlListView_GetIndexByColumns() ; Description: Retourne les indexes dont les textes des colonnes $colonne et $colonne2 correspondent à $search et $search2 ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; $search : Texte 1 à rechercher ; $colonne : Numéro de la colonne 1 à rechercher ; $search2 : Texte 2 à rechercher ; $colonne2 : Numéro de la colonne 2 à rechercher ; ; Retour : succes : les indexes correspondant à la recherche ; fail : Un tableau vide ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_GetIndexByColumns($lView, $search = -1, $colonne = 0, $search2 = -1, $colonne2 = 0) Local $retour[0] Local $count = _GUICtrlListView_GetItemCount($lView) If($count > 0) Then Local $itemText Local $itemText2 For $i = 0 To $count $itemText = _GUICtrlListView_GetItemText($lView, $i, $colonne) $itemText2 = _GUICtrlListView_GetItemText($lView, $i, $colonne2) If(($itemText = $search Or $search = -1) And ($itemText2 = $search2 Or $search2 = -1)) Then _Array_Add($retour, $i) EndIf Next EndIf Return $retour EndFunc ;=============================================================================== ; Nom: _GUICtrlListView_GetSelectedIDs() ; Description: Retourne les IDs (et non pas les indexes) sélectionnés ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; ; Retour : succes : Le handle du premier parent de l'item ; fail : Un tableau vide ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListView_GetSelectedIDs($lView) Local $retour = _GUICtrlListView_GetSelectedIndices($lView, True) _Array_Delete($retour, 0) For $i = 0 To UBound($retour, 1)-1 $retour[$i] = _GUICtrlListView_MapIndexToID($lView, $retour[$i]) Next Return $retour EndFunc ;=============================================================================== ; Nom: _GUICtrlListViewEx_DeleteAllItems() ; Description: Supprime tous les items d'une listview (avec begin et end update) ; Paramètres: $hwnd : Handle (ou CtrlId) de la listView ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlListViewEx_DeleteAllItems($lView) _GUICtrlListView_BeginUpdate($lView) For $i = 0 To _GUICtrlListView_GetItemCount($lView)-1 _GUICtrlListView_DeleteItem($lView, 0) Next _GUICtrlListView_EndUpdate($lView) EndFunc ;=============================================================================== ; Nom: _GUICtrlTreeView_GetAllParentsText() ; Description: Retourne une chaine de caractère contenant les textes des treeviewitems séparé par $separator ; Paramètres: $hwnd : Handle (ou CtrlId) de la treeview ; $hItem : Handle (ou CtrlId) de l'item ; $separator : Séparateur à utiliser ; ; Retour : succes : Chaine contenant les textes des treeviewitems séparé par $separator ; fail : "" ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlTreeView_GetAllParentsText($hwnd, $hItem, $separator) Local $search = "" Local $hParent = _GUICtrlTreeView_GetParentHandle($hwnd, $hItem) If($hParent <> False) Then $search = GetAllParentsText($hwnd, $hParent, $separator) EndIf Return $search & _GUICtrlTreeView_GetText($hwnd, $hItem) & $separator EndFunc ;=============================================================================== ; Nom: _GUICtrlTreeView_GetItemUnderMouse() ; Description: Retourne le handle de l'item sous la souris ; Paramètres: $hwnd : Handle de la treeview ; ; Retour : succes : Le handle de l'item sous la souris ; fail : 0 ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlTreeView_GetItemUnderMouse($hwnd) Local $tPoint = _WinAPI_GetMousePos(True, $hwnd) Local $mX = DllStructGetData($tPoint, "X") Local $mY = DllStructGetData($tPoint, "Y") Return _GUICtrlTreeView_HitTestItem($hwnd, $mX, $mY) EndFunc ;=============================================================================== ; Nom: _GUICtrlTreeView_GetFirstParent() ; Description: Retourne le handle premier parent (racine) d'un item ; Paramètres: $hwnd : Handle (ou CtrlId) de la treeview ; $hItem : Item dont on cherche le parent ; ; Retour : succes : Le handle du premier parent de l'item ; fail : $hItem ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlTreeView_GetFirstParent($hwnd, $hItem) Local $firstParent = $hItem While(True) Local $hParent = _GUICtrlTreeView_GetParentHandle($hwnd, $firstParent) If($hParent = 0) Then ExitLoop $firstParent = $hParent WEnd Return $firstParent EndFunc ;=============================================================================== ; Nom: _GUICtrlTreeView_ExpandIfNot() ; Description: Déplie / Replie un treeview item seulement si celui-ci ne l'est pas déjà ; Paramètres: $hwnd : Handle (ou CtrlId) de la treeview ; $hItem : Item que l'on veut déplier/replier ; $expand : True : Déplier ; False : Replier ; ; Retour : succes : Le handle du premier parent de l'item ; fail : $hItem ; ; Auteur: TommyDDR ;=============================================================================== Func _GUICtrlTreeView_ExpandIfNot($hwnd, $hItem, $expand = True) If(_GUICtrlTreeView_GetExpanded($hwnd, $hItem) <> $expand) Then _GUICtrlTreeView_Expand($hwnd, $hItem, $expand) EndIf EndFunc