Page 1 sur 1
[R] Flèche sur l'entête des listes
Posté : dim. 16 févr. 2014 17:44
par eric
Bonjour,
J'utilise une méthode pour trier les listes en utilisant un array (tableau)
Donc au lieu de faire un _GUICtrlListView_SortItems sur la liste j'ai un array qui est la copie de la liste et que je trie avec la commande _ArraySort
Une fois l'array trié je supprime tout le contenu de la liste avec un _GUICtrlListView_DeleteAllItems et je copie l'array dans la liste avec la commande _GUICtrlListView_AddArray
Cette méthode donne des tris plus rapides qu'avec un _GUICtrlListView_SortItems quand il y a beaucoup de lignes dans la liste.
Mais avec cette méthode la petite flèche qui apparaît dans l'entête de liste avec la commande _GUICtrlListView_SortItems et qui indique le sens du tri n'apparaît pas.
Auriez vous une méthode pour afficher cette flèche ?
Merci
Eric
Voici un extrait de ce code :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
$compteur = 1
; Liste des fichiers
$gui = GUICreate("liste", 750, 630, 20, 20, $WS_THICKFRAME + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX)
$listview = GUICtrlCreateListView("Fichier|Format|Taille", 10, 10, 730, 450, $LVS_SINGLESEL, $LVS_EX_REGIONAL + $LVS_EX_FULLROWSELECT + $LVS_EX_GRIDLINES)
$item1 = GUICtrlCreateListViewItem("fichier1|txt|100 ko", $listview)
$item2 = GUICtrlCreateListViewItem("fichier2|txt|200 ko", $listview)
$item3 = GUICtrlCreateListViewItem("fichier3|txt|300 ko", $listview)
; création de l'array
Global $array[3][3] ; déclaration de l'array
$array[0][0] = "fichier1"
$array[0][1] = "txt"
$array[0][2] = "100 ko"
$array[1][0] = "fichier2"
$array[1][1] = "txt"
$array[1][2] = "200 ko"
$array[2][0] = "fichier3"
$array[2][1] = "txt"
$array[2][2] = "300 ko"
GUISetState(@SW_SHOW, $gui)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $listview
; reclasser les colonnes
Call("trierliste")
EndSelect
WEnd
Func trierliste()
$numcolonne = GUICtrlGetState($listview) ;obtenir le numéro de la colonne cliquée
If $compteur = 1 Then ;trier ascendant
_ArraySort($array, 0, 0, 0, $numcolonne)
$compteur = $compteur - 1
Else
_ArraySort($array, 1, 0, 0, $numcolonne);trier descendant
$compteur = $compteur + 1
EndIf
_GUICtrlListView_DeleteAllItems($listview) ; effacer toute la liste
_GUICtrlListView_AddArray($listview, $array) ; copier l'array dans la liste
EndFunc ;==>trierliste
Re: [..] Flèche sur l'entête des listes
Posté : lun. 17 févr. 2014 12:35
par jguinch
Regarde du côté de
_GUICtrlHeader_SetItemFormat :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
$compteur = 1
; Liste des fichiers
$gui = GUICreate("liste", 750, 630, 20, 20, $WS_THICKFRAME + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX)
$listview = GUICtrlCreateListView("Fichier|Format|Taille", 10, 10, 730, 450, $LVS_SINGLESEL, $LVS_EX_REGIONAL + $LVS_EX_FULLROWSELECT + $LVS_EX_GRIDLINES)
$item1 = GUICtrlCreateListViewItem("fichier1|txt|100 ko", $listview)
$item2 = GUICtrlCreateListViewItem("fichier2|txt|200 ko", $listview)
$item3 = GUICtrlCreateListViewItem("fichier3|txt|300 ko", $listview)
$hHdr = _GUICtrlListView_GetHeader($listview)
; création de l'array
Global $array[3][3] ; déclaration de l'array
$array[0][0] = "fichier1"
$array[0][1] = "txt"
$array[0][2] = "100 ko"
$array[1][0] = "fichier2"
$array[1][1] = "txt"
$array[1][2] = "200 ko"
$array[2][0] = "fichier3"
$array[2][1] = "txt"
$array[2][2] = "300 ko"
GUISetState(@SW_SHOW, $gui)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $listview
; reclasser les colonnes
Call("trierliste")
EndSelect
WEnd
Func trierliste()
$numcolonne = GUICtrlGetState($listview) ;obtenir le numéro de la colonne cliquée
$hHdr = _GUICtrlListView_GetHeader($listview)
Local $Format = _GUICtrlHeader_GetItemFormat($hHdr, $numcolonne)
If $compteur = 1 Then ;trier ascendant
_ArraySort($array, 0, 0, 0, $numcolonne)
$compteur = $compteur - 1
$sortFormat = $HDF_SORTDOWN
Else
_ArraySort($array, 1, 0, 0, $numcolonne);trier descendant
$compteur = $compteur + 1
$sortFormat = $HDF_SORTUP
EndIf
For $i = 0 To 2
_GUICtrlHeader_SetItemFormat($hHdr, $i, BitAND(_GUICtrlHeader_GetItemFormat($hHdr, $i), BitNOT(BitOR($HDF_SORTDOWN, $HDF_SORTUP))))
Next
_GUICtrlHeader_SetItemFormat($hHdr, $numcolonne, BitOR(BitAND($Format, BitNOT(BitOR($HDF_SORTDOWN, $HDF_SORTUP))), $sortFormat))
_GUICtrlListView_DeleteAllItems($listview) ; effacer toute la liste
_GUICtrlListView_AddArray($listview, $array) ; copier l'array dans la liste
EndFunc ;==>trierliste
Re: [..] Flèche sur l'entête des listes
Posté : lun. 17 févr. 2014 17:15
par eric
Bonjour,
Merci jguinch, je vais essayer celà
Re: [..] Flèche sur l'entête des listes
Posté : ven. 21 févr. 2014 17:47
par eric
Je viens tester et cela fonctionne très bien.
Même si mon niveau ne me permet encore de bien comprendre les bitand, bitor et bitnot
En tout cas merci pour ton aide.