Micoute a écrit : lun. 11/sept./2023 9:00
Merci beaucoup boddhi pour cette aide providentielle et très prompte.
A ton service
Par manque de temps, je n'avais pas mis la partie 'chargement'.
Donc, si besoin, le code complété :
Code : Tout sélectionner
;{- Enumerations / DataSections
;{ Fenêtres
Enumeration
#Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
#Edt
#Btn ; --- ajouté
#Btn2 ; --- ajouté
EndEnumeration
;}
;{ Polices
Enumeration
#Police
EndEnumeration
;}
;{ JSON
Enumeration
#JSON
EndEnumeration
;}
;}
;{ Variables
Global Evenement
;}
;{ Chargement et assignation des polices
LoadFont(#Police, "DejaVu Sans Mono", 10, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))
;}
;{ Déclaration des procédures
Declare Programme_principal()
Declare Redimentionner()
Declare Quitter()
Declare Sauvegarder() ; --- ajouté
Declare Charger() ; --- ajouté
;}
;{ Lancement du programme principal
Programme_principal()
;}
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 450, 200, 400, 430, "Mes rendez-vous", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
EditorGadget(#Edt, 10, 10, 380, 350)
ButtonGadget(#Btn, 10, 360, 380, 30, "Sauvegarder") ; --- ajouté
ButtonGadget(#Btn2, 10, 392, 380, 30, "Charger") ; --- ajouté
;{ Evènements liés
; Redimensionnement de la fenêtre
BindEvent(#PB_Event_SizeWindow, @Redimentionner())
; Fermeture de la fenêtre
BindEvent(#PB_Event_CloseWindow, @Quitter())
BindGadgetEvent(#Btn, @Sauvegarder())
BindGadgetEvent(#Btn2, @Charger())
;}
For Compteur=1 To 10
AddGadgetItem(#Edt,-1,"Rendez-vous no "+Str(Compteur))
Next
Repeat
Evenement = WaitWindowEvent()
ForEver
EndIf
EndProcedure
Procedure Redimentionner()
ResizeGadget(#Edt, #PB_Ignore, #PB_Ignore, WindowWidth(#Fenetre_principale) - 20, WindowHeight(#Fenetre_principale) - 20)
EndProcedure
Procedure Quitter()
CloseWindow(#Fenetre_principale)
End
EndProcedure
; --- Sauvegarde
Procedure Sauvegarder()
Protected Txt$,File$
Protected NbLignes=CountGadgetItems(#Edt)-1,Compteur
Protected NewList RendezVous.s()
If NbLignes<0
MessageRequester("","Aucun rendez-vous saisi",#PB_MessageRequester_Warning)
ProcedureReturn
EndIf
File$ = SaveFileRequester("Sauvegarder", "MonFichier.json", "Fichier JSON|*.json", 0)
If File$ <> ""
If CreateJSON(#JSON)
; //// Un moyen comme un autre d'alimenter une arborescence JSON
For Compteur=0 To NbLignes
AddElement(RendezVous())
RendezVous()=GetGadgetItemText(#Edt,Compteur)
Next
InsertJSONList(JSONValue(#JSON),RendezVous())
ClearList(RendezVous())
; ////
If SaveJSON(#JSON,File$,#PB_JSON_PrettyPrint)
MessageRequester("Succès", "Fichier sauvegardé", #PB_MessageRequester_Info)
Else
MessageRequester("Erreur", "Échec sauvegarde " + File$, #PB_MessageRequester_Error)
EndIf
FreeJSON(#JSON)
EndIf
EndIf
EndProcedure
Procedure Charger()
Protected File$
Protected NewList RendezVous.s()
File$ = OpenFileRequester("Charger", "MonFichier.json", "Fichier JSON|*.json", 0)
If File$ <> ""
ClearGadgetItems(#Edt)
If LoadJSON(#JSON,File$,#PB_JSON_NoCase)
ExtractJSONList(JSONValue(#JSON),RendezVous())
If ListSize(RendezVous())
ForEach RendezVous()
AddGadgetItem(#Edt,-1,"Chargé : "+RendezVous())
Next
ClearList(RendezVous())
FreeJSON(#JSON)
Else
MessageRequester("Chargement","Aucune donnée trouvée",#PB_MessageRequester_Warning)
EndIf
Else
MessageRequester("Erreur", "Échec chargement " + File$, #PB_MessageRequester_Error)
EndIf
EndIf
EndProcedure
Note : Il y a plusieurs moyens d'alimenter une arborescence JSON pour finalement arriver au même résultat. Mais, perso, dans ton cas, passer par une Liste() facilitera grandement et la sauvegarde et le chargement de tes données...