Page 1 sur 1

[R] Sauvegarder l'ordre de tri d'une colonne

Posté : mar. 13 août 2024 09:43
par jpascal
Bonjour,

Je sauvegarde la colonne qui est utilisée pour trier les données de ma listview avec ce code dans la fonction WM_NOTIFY :
   Switch $iIDFrom
      Case $idListview
         Switch $iCode
            Case $LVN_COLUMNCLICK
               $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
               _GUICtrlListView_SortItems($iIDFrom, DllStructGetData($tInfo, "SubItem"))
               RegWrite($g_sRegKeyApp, 'Order', 'REG_SZ', DllStructGetData($tInfo, "SubItem"))
               ; No return value
         EndSwitch
...

Est-il possible de sauvegarder également l'ordre de tri (ascendant/descendant) ?

Re: [..] Sauvegarder l'ordre de tri d'une colonne

Posté : mar. 13 août 2024 13:02
par Nine
Ajoute ces lignes après le sort :

Code : Tout sélectionner

          $hHeader = _GUICtrlListView_GetHeader($hWndFrom)
          $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, DllStructGetData($tInfo, "SubItem"))
          If BitAND($iFormat, $HDF_SORTDOWN) Then ConsoleWrite("Down" & @CRLF)
          If BitAND($iFormat, $HDF_SORTUP) Then ConsoleWrite("Up" & @CRLF)

Re: [..] Sauvegarder l'ordre de tri d'une colonne

Posté : mer. 14 août 2024 09:27
par jpascal
Merci Monsieur Nine :)

Pour ceux que ça intéresse, voici le code induit par cette modif :

Dans WM_NOTIFY() :
Switch $iCode
            Case $LVN_COLUMNCLICK
               $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
               Switch DllStructGetData($tInfo, "SubItem")
                     _GUICtrlListView_SortItems($iIDFrom, DllStructGetData($tInfo, "SubItem"))
                     RegWrite($g_sRegKeyApp, 'Order', 'REG_SZ', DllStructGetData($tInfo, "SubItem"))
                     Local $hHeader = _GUICtrlListView_GetHeader($iIDFrom)
                     Local $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, DllStructGetData($tInfo, "SubItem"))
                     RegWrite($g_sRegKeyApp, 'Descending', 'REG_DWORD', BitAND($iFormat, $HDF_SORTDOWN) ? 1 : 0)

Et lors du démarrage de l'appli :
   Local $iOrder = RegRead($g_sRegKeyApp, 'Order')
   If @error Then $iOrder = 3 ; colonne triée par défaut
   Local $iDescending = RegRead($g_sRegKeyApp, 'Descending')
   If @error Then $iDescending = 0
...
; Récupération de données dans $aData
...
   _ArraySort($aData, $iDescending, 0, 0, $iOrder); tri des données