Bonsoir à tous et Bonne Année
j'ai créé une listView qui me donne satisfaction à 99% "seulement" !
En effet, lors d'un premier clic sur en-tête de colonne en ordre ascendant à la création ... il ne se passe rien !
en fait il se passe qu'il y a bien un tri mais systématiquement ascendant au 1er clic sur en-tête :
c'est gênant si l'on veut visualiser en ordre inverse
ce n'est qu'au second clic au même endroit que l'ordre s'inverse
j'utilise _GUICtrlListView_RegisterSortCallBack
j'ai bien bidouillé un truc qui fait, pour une colonne donnée triée en création, que si 1er clic alors mouseClick pour
doubler le clic automatiquement, mais c'est lent et si le curseur est déplacé entre-temps c'est cuit !
On ne peut pas envoyer un paramètre pour inverser l'ordre d'un premier tri dans une colonne ?
Merci pour toute info
1er tri ListView colonne numérique en ordre
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: 1er tri ListView colonne numérique en ordre
Bonsoir papami.
Je viens de tester l'exemple 1 de la documentation pour
Essayez de voir ce qui pourrait manquer entre votre code et celui de l'exemple (Peut-être un style).
Je viens de tester l'exemple 1 de la documentation pour
_GUICtrlListView_RegisterSortCallBack
et visiblement tout fonctionne correctement au premier clic !Essayez de voir ce qui pourrait manquer entre votre code et celui de l'exemple (Peut-être un style).
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Re: 1er tri ListView colonne numérique en ordre
Bonjour Tlem
l'exemple Autoit : oui mais non !
Donc ouvrir exemple 1 et clic direct sur colonne 3 = pshitt !
en fait, comme déjà dit il y a bien un tri , mais sur une colonne déjà triée en ascendant c'est retrié en ascendant
et il faut alors recliquer pour inverser.
Pour de longues listes c'est gênant.
Si dans l'exemple vous remplacez les valeurs 1ère colonne des 3 lignes par 1,2,3 OU A,B,C = même résultat
contrairement à ce qui se passe dans une fenêtre Win : là si une colonne est déjà triée, par exemple nom ou date de modification,
le clic en en-tête de colonne fonctionne dans tous les cas et retrie en sens contraire.
ce que j'aimerais obtenir !
Eventuellement, connaissant la colonne concernée, avec un truc du genre "SI = colonneX ET SI 1er clic alors SENS tri = ...
ou évidemment si les concepteurs s'y intéressent un paramètre supplémentaire dans l'appel du Sort ... si cela n'existe pas déjà mais que je ne saurais pas chercher/trouver.
Merci pour toute info
l'exemple Autoit : oui mais non !
Donc ouvrir exemple 1 et clic direct sur colonne 3 = pshitt !
en fait, comme déjà dit il y a bien un tri , mais sur une colonne déjà triée en ascendant c'est retrié en ascendant
et il faut alors recliquer pour inverser.
Pour de longues listes c'est gênant.
Si dans l'exemple vous remplacez les valeurs 1ère colonne des 3 lignes par 1,2,3 OU A,B,C = même résultat
contrairement à ce qui se passe dans une fenêtre Win : là si une colonne est déjà triée, par exemple nom ou date de modification,
le clic en en-tête de colonne fonctionne dans tous les cas et retrie en sens contraire.
ce que j'aimerais obtenir !
Eventuellement, connaissant la colonne concernée, avec un truc du genre "SI = colonneX ET SI 1er clic alors SENS tri = ...
ou évidemment si les concepteurs s'y intéressent un paramètre supplémentaire dans l'appel du Sort ... si cela n'existe pas déjà mais que je ne saurais pas chercher/trouver.
Merci pour toute info
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: 1er tri ListView colonne numérique en ordre
Bonjour.
Après si vous voulez un autre comportement, il faudra modifier cette fonction en conséquence, mais la tâche peu ne pas être simple ....
Ben c'est un comportement normal puisqueDonc ouvrir exemple 1 et clic direct sur colonne 3 = pshitt !
en fait, comme déjà dit il y a bien un tri , mais sur une colonne déjà triée en ascendant c'est retrié en ascendant
et il faut alors recliquer pour inverser.
_GUICtrlListView_SortItems
tri toujours de la même manière.Après si vous voulez un autre comportement, il faudra modifier cette fonction en conséquence, mais la tâche peu ne pas être simple ....
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- TommyDDR
- Modérateur
- Messages : 2087
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: 1er tri ListView colonne numérique en ordre
Pour moi, il n'y a pas de problème dans l'exemple, certes, l'affichage correspond a un tri sur la 3eme colonne, mais aucun tri n'a vraiment été fait dessus, ce sont juste les données qui ont été entrées par coïncidence dans le bon ordre, ce qui fait qu'au 1er clic, il va trier par ordre croissant, puis au 2eme, en décroissant.
Si vous n'avez pas des milliers d'items, vous pouvez contourner le problème en vérifiant avant le contenu de la listview et si après le tri, rien n'a bougé, vous rappelez SortItems :
Pour l'explication : L'index d'une ligne correspond à un positionnement dans la liste view alors qu'un ID a fixe pour chaque ligne, même si celle-ci change de position dans la liste. Donc en listant dans l'ordre les id des lignes, vous pouvez facilement voir si les lignes ont bougé ou non.
Si vous n'avez pas des milliers d'items, vous pouvez contourner le problème en vérifiant avant le contenu de la listview et si après le tri, rien n'a bougé, vous rappelez SortItems :
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $g_idListView
Example()
Func Example()
Local $hImage, $aIcons[3] = [0, 3, 6]
Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)
Local $iMsg
GUICreate("ListView Sort", 300, 200)
$g_idListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180, -1, $iExWindowStyle)
_GUICtrlListView_SetExtendedListViewStyle($g_idListView, $iExListViewStyle)
; Charge les images
$hImage = _GUIImageList_Create(18, 18, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
_GUICtrlListView_SetImageList($g_idListView, $hImage, 1)
_AddRow($g_idListView, "ABC|000666|10.05.2004", $aIcons)
_AddRow($g_idListView, "DEF|444|11.05.2005", $aIcons, 1)
_AddRow($g_idListView, "CDE|555|12.05.2004", $aIcons, 2)
GUISetState(@SW_SHOW)
_GUICtrlListView_RegisterSortCallBack($g_idListView)
Do
$iMsg = GUIGetMsg()
If $iMsg = $g_idListView Then
; Démarre le tri de rappel
Local $oldState = lviewToString($g_idListView)
_GUICtrlListView_SortItems($g_idListView, GUICtrlGetState($g_idListView))
If($oldState == lviewToString($g_idListView)) Then
_GUICtrlListView_SortItems($g_idListView, GUICtrlGetState($g_idListView))
EndIf
EndIf
Until $iMsg = $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($g_idListView)
GUIDelete()
EndFunc ;==>Example
Func lviewToString($lview)
Local $ret = ""
Local $nbRows = _GUICtrlListView_GetItemCount($lview)
For $i = 0 To $nbRows - 1
$ret &= _GUICtrlListView_MapIndexToID($lview, $i) & "|"
Next
ConsoleWrite($ret & @CRLF)
Return $ret
EndFunc
Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0)
Local $aItem = StringSplit($sItem, "|")
Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999)
_GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER)
For $x = 2 To $aItem[0]
_GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus)
_GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE)
Next
EndFunc ;==>_AddRow
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $g_idListView
Example()
Func Example()
Local $hImage, $aIcons[3] = [0, 3, 6]
Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)
Local $iMsg
GUICreate("ListView Sort", 300, 200)
$g_idListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180, -1, $iExWindowStyle)
_GUICtrlListView_SetExtendedListViewStyle($g_idListView, $iExListViewStyle)
; Charge les images
$hImage = _GUIImageList_Create(18, 18, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
_GUICtrlListView_SetImageList($g_idListView, $hImage, 1)
_AddRow($g_idListView, "ABC|000666|10.05.2004", $aIcons)
_AddRow($g_idListView, "DEF|444|11.05.2005", $aIcons, 1)
_AddRow($g_idListView, "CDE|555|12.05.2004", $aIcons, 2)
GUISetState(@SW_SHOW)
_GUICtrlListView_RegisterSortCallBack($g_idListView)
Do
$iMsg = GUIGetMsg()
If $iMsg = $g_idListView Then
; Démarre le tri de rappel
Local $oldState = lviewToString($g_idListView)
_GUICtrlListView_SortItems($g_idListView, GUICtrlGetState($g_idListView))
If($oldState == lviewToString($g_idListView)) Then
_GUICtrlListView_SortItems($g_idListView, GUICtrlGetState($g_idListView))
EndIf
EndIf
Until $iMsg = $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($g_idListView)
GUIDelete()
EndFunc ;==>Example
Func lviewToString($lview)
Local $ret = ""
Local $nbRows = _GUICtrlListView_GetItemCount($lview)
For $i = 0 To $nbRows - 1
$ret &= _GUICtrlListView_MapIndexToID($lview, $i) & "|"
Next
ConsoleWrite($ret & @CRLF)
Return $ret
EndFunc
Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0)
Local $aItem = StringSplit($sItem, "|")
Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999)
_GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER)
For $x = 2 To $aItem[0]
_GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus)
_GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE)
Next
EndFunc ;==>_AddRow
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Re: 1er tri ListView colonne numérique en ordre
Bonsoir,
Super, merci
C'est mieux que ma bidouille mouse re-clic !
maintenant je ne sais pas si je dois indiquer quelque part ici que mon problème est résolu ?
en tous cas il l'est
cdt
Super, merci
C'est mieux que ma bidouille mouse re-clic !
maintenant je ne sais pas si je dois indiquer quelque part ici que mon problème est résolu ?
en tous cas il l'est
cdt
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: 1er tri ListView colonne numérique en ordre
Vous avez cliqué sur l'icône correspondant, donc le sujet est marqué résolu (la petite coche verte). ^^
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".