je viens ici pour solliciter votre aide, car j'essaie de faire un annuaire de mes praticiens, pour aller droit au but, je souhaite que les professions qui sont en doublons n'apparaissent qu'une seul fois dans ma listview de praticiens, mais s'affichent dans ma listicon quand une profession est sélectionnée, par exemple je clique sur Infirmière et ça m'en affiche 3.
Je vous remercie tous par anticipation
Code : Tout sélectionner
Enumeration Fichiers
#FichierJSON
EndEnumeration
Enumeration
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Liste_praticiens
#ListIcon_Affichage
#Str_Affichage
#Txt_Annuaire
#Txt_par
#Txt_Date
#Btn_Quitter
#Cvs
EndEnumeration
Enumeration Polices
#Police_Txt
#Police_Lst
#Police_Btn
EndEnumeration
;Structure d'un praticien
Structure praticien
Nom.s
Prenom.s
Profession.s
Tel.s
Adresse.s
CodePostal.s
Ville.s
EndStructure
Declare Charger_praticiens()
Declare Programme_principal()
Declare Quitter()
Global Evenement, i
Global Btn_SourisPresse, DecalageX, DecalageY, Quitter
;Création d'une liste vierge pour les praticiens
Global.praticien NewList Provis(), NewList praticiens(), NewList Annuaire()
Global Dim Profession.praticien(0), quantite
Global$ FichierJson = "D:\Programmation\Donnees\praticiens 2.json"
Programme_principal()
Procedure Quitter()
Select EventType()
Case #PB_EventType_LeftClick
CloseWindow(#Fenetre_principale)
End
EndSelect
EndProcedure
Macro TrierListeStruc(_NomListe_, _Options_, _Champ_Structure_)
; Cette macro simplifie l'utilisation de la fonction intégrée SortStructuredList().
SortStructuredList(_NomListe_, _Options_, OffsetOf(_Champ_Structure_), TypeOf(_Champ_Structure_))
EndMacro
;Chargement des praticiens existants
Procedure Charger_praticiens()
If ReadFile(#FichierJSON, FichierJson)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, FichierJson, #PB_JSON_NoCase)
;Extraction de la chaine JSON vers la liste chainée praticiens
ExtractJSONList(JSONValue(#FichierJSON), praticiens())
TrierListeStruc(praticiens(), #PB_Sort_Ascending, praticien\Profession)
;Affichage de la liste des praticiens
ForEach praticiens()
With praticiens()
AddGadgetItem(#Liste_praticiens, -1, \Profession)
SetGadgetItemData(#Liste_praticiens, CountGadgetItems(#Liste_praticiens) - 1, ListIndex(praticiens()))
EndWith
Next
EndIf
EndProcedure
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 0, 0, 1200, 640, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
CanvasGadget(#Cvs, 0, 0, 1200, 640, #PB_Canvas_Container)
StartDrawing(CanvasOutput(#Cvs))
Box(0, 0, 1200, 640, $FF0000)
StopDrawing()
ListViewGadget(#Liste_praticiens, 10, 10, 380, 620)
ListIconGadget(#ListIcon_Affichage, 400, 10, 790, 220, "Téléphone", 150, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListIcon_Affichage, 1, "Nom", 320)
AddGadgetColumn(#ListIcon_Affichage, 2, "Ville", 320)
StringGadget(#Str_Affichage, 400, 240, 790, 60, "", #PB_String_ReadOnly)
TextGadget(#Txt_Annuaire, 400, 310, 790, 80, "Annuaire des praticiens",#SS_CENTERIMAGE|#SS_CENTER)
TextGadget(#Txt_par, 400, 390, 790, 80, "par Micoute",#SS_CENTERIMAGE|#SS_CENTER)
TextGadget(#Txt_Date, 400, 470, 790, 80, "5 juillet 2019",#SS_CENTERIMAGE|#SS_CENTER)
ButtonGadget(#Btn_Quitter, 1040, 570, 150, 60, "Quitter")
CloseGadgetList()
LoadFont(#Police_Txt, "Times New Roman", 50, #PB_Font_Italic)
LoadFont(#Police_Lst, "Arial Nova", 15, #PB_Font_Bold)
LoadFont(#Police_Btn, "Arial Nova", 20, #PB_Font_Bold)
For i = #Txt_Annuaire To #Txt_Date
SetGadgetColor(i, #PB_Gadget_BackColor, $FF0000)
SetGadgetColor(i, #PB_Gadget_FrontColor, $00FFFF)
SetGadgetFont(i, FontID(#Police_Txt))
Next i
SetGadgetFont(#Btn_Quitter, FontID(#Police_Btn))
SetGadgetFont(#ListIcon_Affichage, FontID(#Police_Lst))
SetGadgetFont(#Liste_praticiens, FontID(#Police_Lst))
SetGadgetFont(#Str_Affichage, FontID(#Police_Lst))
Charger_praticiens()
EndIf
EndProcedure
Procedure Remplir_Page_Annuaire()
Protected Item = GetGadgetState(#Liste_praticiens)
ClearGadgetItems(#ListIcon_Affichage)
If Item <> -1
SelectElement(praticiens(), GetGadgetItemData(#Liste_praticiens, Item))
With Praticiens()
AddGadgetItem(#ListIcon_Affichage, -1, \Tel+ #LF$ + \Nom + #LF$ + \Ville)
EndWith
EndIf
EndProcedure
;- Boucle
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Cvs
Select EventType()
Case #PB_EventType_LeftButtonDown
Btn_SourisPresse = 1
DecalageX = DesktopMouseX() - WindowX(#Fenetre_principale)
DecalageY = DesktopMouseY() - WindowY(#Fenetre_principale)
Case #PB_EventType_MouseMove
If Btn_SourisPresse
ResizeWindow(#Fenetre_principale,
DesktopMouseX() - DecalageX,
DesktopMouseY() - DecalageY,
#PB_Ignore, #PB_Ignore)
EndIf
Case #PB_EventType_LeftButtonUp
Btn_SourisPresse = 0
EndSelect
Case #Liste_praticiens
Remplir_Page_Annuaire()
Case #ListIcon_Affichage
Case #Str_Affichage
Case #Btn_Quitter
Quitter()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
EndSelect
EndSelect
ForEver