
Comment modifier la position d'un élément dans un ListIconGadget().
(Du genre "Monter d'un cran", "Descendre d'un cran", etc...)
Bon, c'est du niveau débutant, mais ça peut toujours être utile.
Code : Tout sélectionner
; Modifier la position d'un élément dans une liste
; Auteur : Chris
; Os : Tous
#Window = 0
Enumeration
#List
#Btn_Up
#Btn_Down
EndEnumeration
; Création d'une liste pour stocker la position des éléments
NewList ListOrder.l()
; Pour l'exemple, on la remplit avec 10 éléments
For i = 1 To 10
AddElement(ListOrder()) : ListOrder() = i
Next
; Création de la fenêtre et des gadgets
If OpenWindow(#Window,100,100,310,210,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ListIcon")
If CreateGadgetList(WindowID())
ListIconGadget(#List,5,5,260,200,"Test",200,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
ButtonGadget(#Btn_Up, 270, 60, 35, 30, "Haut")
ButtonGadget(#Btn_Down, 270, 100, 35, 30, "Bas")
EndIf
EndIf
; Affichage des éléments dans la ListIcon
ForEach ListOrder()
AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
Next
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
; Sélection d'un élément dont on veut modifier la position
Case #List
If EventType() = #PB_EventType_LeftClick
Selected = GetGadgetState(#List)
EndIf
Case #Btn_Up
; On veut remonter l'élément sélectionné
If Selected > 0 ; Si il n'est pas déjà le premier
SelectElement(ListOrder(), Selected)
*OldPos = @ListOrder() ; On récupère son adresse
PreviousElement(ListOrder())
*NewPos = @ListOrder() ; On récupère l'adresse de celui qui le précède
; On échange les deux éléments
SwapElements(ListOrder(), *OldPos, *NewPos)
; Et on réaffiche le tout
ClearGadgetItemList(#List)
ForEach ListOrder()
AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
Next
; On sélectionne l'élément à sa nouvelle position
Selected -1 : SetGadgetState(#List, Selected)
EndIf
Case #Btn_Down
; On veut descendre l'élément sélectionné
If Selected < CountGadgetItems(#List)-1 ; Si il n'est pas le dernier
SelectElement(ListOrder(), Selected)
*OldPos = @ListOrder() ; On récupère son adresse
NextElement(ListOrder())
*NewPos = @ListOrder() ; On récupère l'adresse de celui qui le suit
; On échange les deux éléments
SwapElements(ListOrder(), *OldPos, *NewPos)
; Et on réaffiche le tout
ClearGadgetItemList(#List)
ForEach ListOrder()
AddGadgetItem(#List, -1, "Ligne "+Str(ListOrder()))
Next
; On sélectionne l'élément à sa nouvelle position
Selected +1 : SetGadgetState(#List, Selected)
EndIf
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit
End