Je voulais avoir des entêtes cliquables pour faire un tri. J'ai fait des recherches mais les codes proposés ne fonctionnaient plus sauf celui-ci que je viens de découvrir.
https://www.purebasic.fr/english/viewto ... 24#p596324
Je poste tout de même ma solution un peu différente et assez simple à intégrer.
Code : Tout sélectionner
EnableExplicit
Global quit,liste = 10 , event, Gadget
Structure Person
nom.s
prenom.s
id.i
EndStructure
Global Dim tabTries.Person(2)
tabTries(0)\nom = "Lager" : tabTries(0)\prenom = "Jules" : tabTries(0)\id = 7
tabTries(1)\nom = "Lager" : tabTries(1)\prenom = "Jérome" : tabTries(1)\id = 12
tabTries(2)\nom = "Garcia" : tabTries(2)\prenom = "Luca" : tabTries(2)\id = 2
Procedure TriAppel(Critere.s)
Define i
Debug Critere
For i = 0 To 2
Debug tabTries(i)\nom +" "+tabTries(i)\prenom
Next
Select Critere
Case "Nom"
SortStructuredArray(tabTries(), #PB_Sort_Ascending, OffsetOf(Person\nom), TypeOf(Person\nom))
Case "Prenom"
SortStructuredArray(tabTries(), #PB_Sort_Ascending, OffsetOf(Person\prenom), TypeOf(Person\prenom))
Case "Id"
SortStructuredArray(tabTries(), #PB_Sort_Ascending, OffsetOf(Person\id), TypeOf(Person\id))
EndSelect
EndProcedure
Procedure AfficheListe()
Define i
; vide la liste
For i = 0 To 2
RemoveGadgetItem(liste, 0)
Next
; lit les data
For i = 0 To 2
AddGadgetItem(liste, -1, tabTries(i)\nom + #LF$ + tabTries(i)\prenom + #LF$ + tabTries(i)\id)
Next
EndProcedure
OpenWindow(0, 200, 100, 600, 300, "Disable highlight example")
ListIconGadget(liste, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 20, "Nom", 110)
AddGadgetColumn(liste, 1, "Prenom", 100)
AddGadgetColumn(liste, 2, "Id", 100)
CocoaMessage(0, GadgetID(liste), "setAllowsColumnSelection:", #YES) ; autorise la selection de colonne
CocoaMessage(0, GadgetID(liste), "setSelectionHighlightStyle:", -1); -1 pas de surlignement / surlignement
AfficheListe()
Repeat
event = WaitWindowEvent()
Gadget = EventGadget();
Select Event
Case #PB_Event_CloseWindow
quit = 1
Case #PB_Event_Gadget
Select Gadget
Case liste ; liste
Define SelectedColumn
Select EventType()
Case #PB_EventType_LeftDoubleClick ; Edite tireur
Debug "ligne selectionnée"
Case #PB_EventType_LeftClick ; clic gauche
SelectedColumn = CocoaMessage(0, GadgetID(Liste) , "selectedColumn")
Debug SelectedColumn
If SelectedColumn = -1
Debug "Aucune colonne de sélectionnée"
CocoaMessage(0, GadgetID(liste), "setSelectionHighlightStyle:", 0); -1 pas de surlignement / surlignement
Else
Debug "colonne sélectionnée"
;selection d'une colonne > tri
CocoaMessage(0, GadgetID(liste), "setSelectionHighlightStyle:", -1); -1 pas de surlignement / surlignement
TriAppel(GetGadgetItemText(Gadget,-1,SelectedColumn)) ;Select SelectedColumn
AfficheListe()
EndIf
EndSelect
EndSelect
EndSelect
Until quit =1