[Resolu] doublons ou lignes identiques listicon
Publié : sam. 15/sept./2012 9:24
Bonjour,
Je relance à nouveau le même sujet, car malgré l'aide précieuse de G-Rom je n'arrive pas à faire ce que je voudrai.
J'ai rajouté une colonne dans mes listicon et je n'arrive pas à adapter l'exemple suivant que m'a fourni G-Rom.
Ce code marche très bien avec une colonne unique, mais je n'avait pas précisé que j'avais 2 colonnes, et là je n'arrive à rien.
Voici un exemple de ce que j'aimerai faire :
J'espère cette fois-ci être plus clair.
Merci d'avance de votre aide.
Je relance à nouveau le même sujet, car malgré l'aide précieuse de G-Rom je n'arrive pas à faire ce que je voudrai.
J'ai rajouté une colonne dans mes listicon et je n'arrive pas à adapter l'exemple suivant que m'a fourni G-Rom.
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration
#ListIcon_1
#Button_1
#ListIcon_2
EndEnumeration
Global NewMap m_Word.i()
Procedure add_word(word.s)
If FindMapElement(m_Word(), word)
m_Word(word) + 1 ; c'est un doublon
Else
m_Word(word) = 1 ; ce n'est pas un doublon
EndIf
AddGadgetItem(#ListIcon_1,-1,word)
EndProcedure
Procedure.i word_occurence(word.s)
If FindMapElement(m_Word(), word)
ProcedureReturn m_Word(word)
EndIf
ProcedureReturn 0
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 451, 230, 536, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ListIconGadget(#ListIcon_1, 25, 20, 220, 225, "Listicon 1", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
SendMessage_(GadgetID(#ListIcon_1), #LVM_SETCOLUMNWIDTH, 0, #LVSCW_AUTOSIZE_USEHEADER)
ButtonGadget(#Button_1, 265, 255, 210, 25, "afficher les lignes identiques")
ListIconGadget(#ListIcon_2, 255, 20, 230, 225, "Listicon 2", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
SendMessage_(GadgetID(#ListIcon_2), #LVM_SETCOLUMNWIDTH, 0, #LVSCW_AUTOSIZE_USEHEADER)
add_word("six")
add_word("trois")
add_word("un")
add_word("trois")
add_word("quatre")
add_word("deux")
add_word("deux")
add_word("un")
add_word("un")
EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
Select WaitWindowEvent()
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_1
ClearGadgetItems(#ListIcon_2)
; On parcours la première liste
nb = CountGadgetItems(#ListIcon_1)
For i = 0 To nb-1
word$ = GetGadgetItemText(#ListIcon_1,i)
If word_occurence(word$) > 1
AddGadgetItem(#ListIcon_2,-1,word$)
EndIf
Next
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Voici un exemple de ce que j'aimerai faire :
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#ListIcon_TitreUnique
#ListIcon_TitreEnDouble
#Text_2
#Text_3
#Button_AfficherLesTitres
EndEnumeration
Structure Films
Titre.s
Code.s
EndStructure
Global NewList ListeFilms.Films()
;}
;}
Procedure ListeTousLesFilms()
; cette liste est une liste exemple, mais peut contenir beaucoup plus de titres
AddElement(ListeFilms())
ListeFilms()\Titre = "waterloo"
ListeFilms()\Code = "173400"
AddElement(ListeFilms())
ListeFilms()\Titre = "paris"
ListeFilms()\Code = "201607"
AddElement(ListeFilms())
ListeFilms()\Titre = "berlin"
ListeFilms()\Code = "156238"
AddElement(ListeFilms())
ListeFilms()\Titre = "waterloo"
ListeFilms()\Code = "167235"
AddElement(ListeFilms())
ListeFilms()\Titre = "paris"
ListeFilms()\Code = "44562"
AddElement(ListeFilms())
ListeFilms()\Titre = "pollo"
ListeFilms()\Code = "132413"
; ///////////////////////////////////
; Je n'arrive pas à trier la liste par ordre alphabétique
SortList(ListeFilms(), #PB_Sort_Descending)
;///////////////////////////////
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 493, 291, "Afficher les titres", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ListIconGadget(#ListIcon_TitreUnique, 5, 45, 235, 190, "Titre", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
ListIconGadget(#ListIcon_TitreEnDouble, 250, 45, 235, 190, "Titre", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
TextGadget(#Text_2, 80, 15, 85, 20, "Titres uniques")
TextGadget(#Text_3, 325, 15, 95, 15, "Titre en doubles")
ButtonGadget(#Button_AfficherLesTitres, 175, 250, 130, 30, "Afficher les titres")
AddGadgetColumn(#ListIcon_TitreUnique, 1, "Code" , 60)
AddGadgetColumn(#ListIcon_TitreEnDouble, 1, "Code" , 60)
EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ListIcon_TitreUnique
Case #ListIcon_TitreEnDouble
Case #Text_2
Case #Text_3
Case #Button_AfficherLesTitres
;/////////////////////////////////
; j'aimerai récupérer les éléments de la ListeFilms() séparer les titres uniques des titres en double
; et les afficher par ordre alphabéthique dans les 2 listicon
; le code des AddGadgetItem(#ListIcon.. est là juste pour montrer ce que j'aimerai afficher
; afficher titres uniques par ordre alphabéthique
AddGadgetItem(#ListIcon_TitreUnique,-1, "berlin" + Chr(10) + "156238")
AddGadgetItem(#ListIcon_TitreUnique,-1, "pollo" + Chr(10) + "132413")
; afficher titres en double par ordre alphabéthique
AddGadgetItem(#ListIcon_TitreEnDouble,-1, "paris" + Chr(10) + "201607")
AddGadgetItem(#ListIcon_TitreEnDouble,-1, "paris" + Chr(10) + "44562")
AddGadgetItem(#ListIcon_TitreEnDouble,-1, "waterloo" + Chr(10) + "173400")
AddGadgetItem(#ListIcon_TitreEnDouble,-1, "waterloo" + Chr(10) + "167235")
;//////////////////////////////////
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Merci d'avance de votre aide.