j'essaie de faire pour ma très chère épouse adorée, un menu de la semaine pour pouvoir faire la liste d'achats, bien entendu il est complètement fonctionnel, mais j'aimerais ajouter une sauvegarde Json et une recharge, pour pouvoir modifier ou compléter un menu.
Le problème c'est que je ne sais pas sauvegarder un tableau et là il y en a 2, alors ça complique un peu, mais si je comprenais le principe, ce serait plus simple.
Je sollicite une fois de plus votre aide gracieuse et je vous en remercie par anticipation.
http://s000.tinyupload.com/?file_id=528 ... 9702865113
Le programme seul:
Code : Tout sélectionner
XIncludeFile "Fonctions_Date.pbi"
XIncludeFile "Imprime facile 2.pbi"
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Text_Lundi
#Text_Lundi_Midi
#Text_Lundi_Soir
#Text_Mardi
#Text_Mardi_Midi
#Text_Mardi_Soir
#Text_Mercredi
#Text_Mercredi_Midi
#Text_Mercredi_Soir
#Text_Jeudi
#Text_Jeudi_Midi
#Text_Jeudi_Soir
#Text_Vendredi
#Text_Vendredi_Midi
#Text_Vendredi_Soir
#Text_Samedi
#Text_Samedi_Midi
#Text_Samedi_Soir
#Text_Dimanche
#Text_Dimanche_Midi
#Text_Dimanche_Soir
#Str_Lundi_Midi_Plat1
#Str_Lundi_Midi_Plat2
#Str_Lundi_Soir_Plat1
#Str_Lundi_Soir_Plat2
#Str_Mardi_Midi_Plat1
#Str_Mardi_Midi_Plat2
#Str_Mardi_Soir_Plat1
#Str_Mardi_Soir_Plat2
#Str_Mercredi_Midi_Plat1
#Str_Mercredi_Midi_Plat2
#Str_Mercredi_Soir_Plat1
#Str_Mercredi_Soir_Plat2
#Str_Jeudi_Midi_Plat1
#Str_Jeudi_Midi_Plat2
#Str_Jeudi_Soir_Plat1
#Str_Jeudi_Soir_Plat2
#Str_Vendredi_Midi_Plat1
#Str_Vendredi_Midi_Plat2
#Str_Vendredi_Soir_Plat1
#Str_Vendredi_Soir_Plat2
#Str_Samedi_Midi_Plat1
#Str_Samedi_Midi_Plat2
#Str_Samedi_Soir_Plat1
#Str_Samedi_Soir_Plat2
#Str_Dimanche_Midi_Plat1
#Str_Dimanche_Midi_Plat2
#Str_Dimanche_Soir_Plat1
#Str_Dimanche_Soir_Plat2
#BarreStatut
#Bouton_Imprimer
#Bouton_Sauvegarder
#Bouton_Charger
#Container_Lundi
#Container_Mardi
#Container_Mercredi
#Container_Jeudi
#Container_Vendredi
#Container_Samedi
#Container_Dimanche
#Spn_Semaine
EndEnumeration
Enumeration Json
#Fichier_Json
EndEnumeration
Enumeration Polices
#Police
#Police2
EndEnumeration
;- Variables globales
Global.i i
Global Dim PlatM.s(6, 1)
Global Dim PlatS.s(6, 1)
Global NewList Lplats.s()
Global.i Police, Police2, evenement, nb_jour.w, date_1erjour_annee.l, date_debut_semaine.s, date_fin_semaine.s
Police = LoadFont(#Police, "Comic Sans MS", 16 , #PB_Font_Bold)
Police2 = LoadFont(#Police2, "Comic Sans MS", 8 , #PB_Font_Bold)
Procedure.s SemaineVersDate(numero_semaine.b, Annee.q = -1)
If Annee < 0
annee = Year(Date())
EndIf
nb_jour = 7*(numero_semaine + 2)
;Debug nb_jour
date_1erjour_annee = ParseDate("%dd/%mm/%yyyy", "01/01/"+Str(annee))
date_debut_semaine.s = FormatDate("%dd/%mm/%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+1))
date_fin_semaine.s = FormatDate("%dd/%mm/%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+7))
ProcedureReturn "du "+date_debut_semaine + " au "+ date_fin_semaine
EndProcedure
Procedure Charger()
EndProcedure
Procedure Sauvegarder()
CreateJSON(#Fichier_Json)
InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
SaveJSON(#Fichier_Json, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine + ".Json")
EndProcedure
Procedure Imprimer()
If DefaultPrinter()
If StartPrinting("Menu")
StartDrawing(PrinterOutput())
MLD_ImpFont("Georgia", 18, #PB_Font_HighQuality, 0, 0, $8B453B)
MLD_ImpText(-2, 10, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine) ; texte centré
MLD_ImpText(40, 30, "Midi")
MLD_ImpText(120, 30, "Soir")
MLD_ImpText(10, 40, "Lundi ")
MLD_ImpText(40, 40, PlatM(0,0))
MLD_ImpText(120, 40, PlatS(0,0))
MLD_ImpText(40, 45, PlatM(0,1))
MLD_ImpText(120, 45, PlatS(0,1))
MLD_ImpText(40, 65, "Midi")
MLD_ImpText(120, 65, "Soir")
MLD_ImpText(10, 75, "Mardi ")
MLD_ImpText(40, 75, PlatM(1,0))
MLD_ImpText(120, 75, PlatS(1,0))
MLD_ImpText(40, 80, PlatM(1,1))
MLD_ImpText(120, 80, PlatS(1,1))
MLD_ImpText(40, 100, "Midi")
MLD_ImpText(120, 100, "Soir")
MLD_ImpText(10, 110, "Mercredi ")
MLD_ImpText(40, 110, PlatM(2,0))
MLD_ImpText(120, 110, PlatS(2,0))
MLD_ImpText(40, 115, PlatM(2,1))
MLD_ImpText(120, 115, PlatS(2,1))
MLD_ImpText(40, 135, "Midi")
MLD_ImpText(120, 135, "Soir")
MLD_ImpText(10, 145, "Jeudi ")
MLD_ImpText(40, 145, PlatM(3,0))
MLD_ImpText(120, 145, PlatS(3,0))
MLD_ImpText(40, 150, PlatM(3,1))
MLD_ImpText(120, 150, PlatS(3,1))
MLD_ImpText(40, 170, "Midi")
MLD_ImpText(120, 170, "Soir")
MLD_ImpText(10, 180, "Vendredi ")
MLD_ImpText(40, 180, PlatM(4,0))
MLD_ImpText(120, 180, PlatS(4,0))
MLD_ImpText(40, 185, PlatM(4,1))
MLD_ImpText(120, 185, PlatS(4,1))
MLD_ImpText(40, 205, "Midi")
MLD_ImpText(120, 205, "Soir")
MLD_ImpText(10, 215, "Samedi ")
MLD_ImpText(40, 215, PlatM(5,0))
MLD_ImpText(120, 215, PlatS(5,0))
MLD_ImpText(40, 220, PlatM(5,1))
MLD_ImpText(120, 220, PlatS(5,1))
MLD_ImpText(40, 240, "Midi")
MLD_ImpText(120, 240, "Soir")
MLD_ImpText(10, 250, "Dimanche ")
MLD_ImpText(40, 250, PlatM(6,0))
MLD_ImpText(120, 250, PlatS(6,0))
MLD_ImpText(40, 255, PlatM(6,1))
MLD_ImpText(120, 255, PlatS(6,1))
StopDrawing()
StopPrinting()
EndIf
EndIf
EndProcedure
Procedure Ouvrir_Fenetre_principale()
If OpenWindow(#Fenetre_principale, 0, 0, 690, 915, "Menu de la semaine", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
SetWindowColor(#Fenetre_principale, $0A78FF)
ButtonGadget(#Bouton_Imprimer, 200, 855, 60, 20, "Imprimer")
ButtonGadget(#Bouton_Sauvegarder, 400, 855, 80, 20, "Sauvegarder")
ButtonGadget(#Bouton_Charger, 600, 855, 60, 20, "Charger")
ContainerGadget(#Container_Lundi, 5, 5, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Lundi, 5, 60, 50, 20, "Lundi")
TextGadget(#Text_Lundi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Lundi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Lundi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Lundi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Lundi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Lundi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Mardi, 5, 125, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Mardi, 5, 60, 50, 20, "Mardi")
TextGadget(#Text_Mardi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Mardi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Mardi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Mardi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Mardi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Mardi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Mercredi, 5, 245, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Mercredi, 5, 60, 50, 20, "Mercredi")
TextGadget(#Text_Mercredi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Mercredi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Mercredi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Mercredi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Mercredi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Mercredi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Jeudi, 5, 365, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Jeudi, 5, 60, 50, 20, "Jeudi")
TextGadget(#Text_Jeudi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Jeudi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Jeudi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Jeudi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Jeudi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Jeudi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Vendredi, 5, 485, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Vendredi, 5, 60, 50, 20, "Vendredi")
TextGadget(#Text_Vendredi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Vendredi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Vendredi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Vendredi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Vendredi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Vendredi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Samedi, 5, 605, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Samedi, 5, 60, 50, 20, "Samedi")
TextGadget(#Text_Samedi_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Samedi_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Samedi_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Samedi_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Samedi_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Samedi_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
ContainerGadget(#Container_Dimanche, 5, 725, 680, 115, #PB_Container_Raised)
TextGadget(#Text_Dimanche, 5, 60, 50, 20, "Dimanche")
TextGadget(#Text_Dimanche_Midi, 60, 5, 50, 20, "Midi")
TextGadget(#Text_Dimanche_Soir, 365, 5, 50, 20, "Soir")
StringGadget(#Str_Dimanche_Midi_Plat1, 60, 30, 300, 35, "")
StringGadget(#Str_Dimanche_Midi_Plat2, 60, 70, 300, 35, "")
StringGadget(#Str_Dimanche_Soir_Plat1, 365, 30, 300, 35, "")
StringGadget(#Str_Dimanche_Soir_Plat2, 365, 70, 300, 35, "")
CloseGadgetList()
SpinGadget(#Spn_Semaine, 10, 855, 50, 20, 1, 53, #PB_Spin_Numeric)
SetGadgetState(#Spn_Semaine, NumSemaine())
If CreateStatusBar(#BarreStatut, WindowID(#Fenetre_principale))
AddStatusBarField(#PB_Ignore)
StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(NumSemaine() - 1))
EndIf
SetGadgetColor(#Container_Lundi, #PB_Gadget_BackColor, $0A0AFF)
For i = #Text_Lundi To #Text_Lundi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0A0AFF)
Next i
SetGadgetColor(#Container_Mardi, #PB_Gadget_BackColor, $0A28FF)
For i = #Text_Mardi To #Text_Mardi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0A28FF)
Next i
SetGadgetColor(#Container_Mercredi, #PB_Gadget_BackColor, $0A50FF)
For i = #Text_Mercredi To #Text_Mercredi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0A50FF)
Next i
SetGadgetColor(#Container_Jeudi, #PB_Gadget_BackColor, $0A78FF)
For i = #Text_Jeudi To #Text_Jeudi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0A78FF)
Next i
SetGadgetColor(#Container_Vendredi, #PB_Gadget_BackColor, $0AA0FF)
For i = #Text_Vendredi To #Text_Vendredi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0AA0FF)
Next i
SetGadgetColor(#Container_Samedi, #PB_Gadget_BackColor, $0AC8FF)
For i = #Text_Samedi To #Text_Samedi_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0AC8FF)
Next i
SetGadgetColor(#Container_Dimanche, #PB_Gadget_BackColor, $0AF0FF)
For i = #Text_Dimanche To #Text_Dimanche_Soir
SetGadgetColor(i, #PB_Gadget_BackColor, $0AF0FF)
Next i
For i = #Text_Lundi To #Text_Dimanche_Soir
SetGadgetFont(i, FontID(#Police2))
Next
For i = #Str_Lundi_Midi_Plat1 To #Str_Dimanche_Soir_Plat2
SetGadgetFont(i, FontID(#Police))
Next
EndIf
EndProcedure
Ouvrir_Fenetre_principale()
;- Boucle événementielle
Repeat
evenement = WaitWindowEvent()
Select evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Str_Lundi_Midi_Plat1
PlatM(0, 0) = GetGadgetText(#Str_Lundi_Midi_Plat1)
Case #Str_Lundi_Midi_Plat2
PlatM(0, 1) = GetGadgetText(#Str_Lundi_Midi_Plat2)
Case #Str_Lundi_Soir_Plat1
PlatS(0, 0) = GetGadgetText(#Str_Lundi_Soir_Plat1)
Case #Str_Lundi_Soir_Plat2
PlatS(0, 1) = GetGadgetText(#Str_Lundi_Soir_Plat2)
Case #Str_Mardi_Midi_Plat1
PlatM(1, 0) = GetGadgetText(#Str_Mardi_Midi_Plat1)
Case #Str_Mardi_Midi_Plat2
PlatM(1, 1) = GetGadgetText(#Str_Mardi_Midi_Plat2)
Case #Str_Mardi_Soir_Plat1
PlatS(1, 0) = GetGadgetText(#Str_Mardi_Soir_Plat1)
Case #Str_Mardi_Soir_Plat2
PlatS(1, 1) = GetGadgetText(#Str_Mardi_Soir_Plat2)
Case #Str_Mercredi_Midi_Plat1
PlatM(2, 0) = GetGadgetText(#Str_Mercredi_Midi_Plat1)
Case #Str_Mercredi_Midi_Plat2
PlatM(2, 1) = GetGadgetText(#Str_Mercredi_Midi_Plat2)
Case #Str_Mercredi_Soir_Plat1
PlatS(2, 0) = GetGadgetText(#Str_Mercredi_Soir_Plat1)
Case #Str_Mercredi_Soir_Plat2
PlatS(2, 1) = GetGadgetText(#Str_Mercredi_Soir_Plat2)
Case #Str_Jeudi_Midi_Plat1
PlatM(3, 0) = GetGadgetText(#Str_Jeudi_Midi_Plat1)
Case #Str_Jeudi_Midi_Plat2
PlatM(3, 1) = GetGadgetText(#Str_Jeudi_Midi_Plat2)
Case #Str_Jeudi_Soir_Plat1
PlatS(3, 0) = GetGadgetText(#Str_Jeudi_Soir_Plat1)
Case #Str_Jeudi_Soir_Plat2
PlatS(3, 1) = GetGadgetText(#Str_Jeudi_Soir_Plat2)
Case #Str_Vendredi_Midi_Plat1
PlatM(4, 0) = GetGadgetText(#Str_Vendredi_Midi_Plat1)
Case #Str_Vendredi_Midi_Plat2
PlatM(4, 1) = GetGadgetText(#Str_Vendredi_Midi_Plat2)
Case #Str_Vendredi_Soir_Plat1
PlatS(4, 0) = GetGadgetText(#Str_Vendredi_Soir_Plat1)
Case #Str_Vendredi_Soir_Plat2
PlatS(4, 1) = GetGadgetText(#Str_Vendredi_Soir_Plat2)
Case #Str_Samedi_Midi_Plat1
PlatM(5, 0) = GetGadgetText(#Str_Samedi_Midi_Plat1)
Case #Str_Samedi_Midi_Plat2
PlatM(5, 1) = GetGadgetText(#Str_Samedi_Midi_Plat2)
Case #Str_Samedi_Soir_Plat1
PlatS(5, 0) = GetGadgetText(#Str_Samedi_Soir_Plat1)
Case #Str_Samedi_Soir_Plat2
PlatS(5, 1) = GetGadgetText(#Str_Samedi_Soir_Plat2)
Case #Str_Dimanche_Midi_Plat1
PlatM(6, 0) = GetGadgetText(#Str_Dimanche_Midi_Plat1)
Case #Str_Dimanche_Midi_Plat2
PlatM(6, 1) = GetGadgetText(#Str_Dimanche_Midi_Plat2)
Case #Str_Dimanche_Soir_Plat1
PlatS(6, 0) = GetGadgetText(#Str_Dimanche_Soir_Plat1)
Case #Str_Dimanche_Soir_Plat2
PlatS(6, 1) = GetGadgetText(#Str_Dimanche_Soir_Plat2)
Case #Spn_Semaine
SemaineVersDate(GetGadgetState(#Spn_Semaine), Year(Date()))
StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(GetGadgetState(#Spn_Semaine)-1))
Case #Bouton_Imprimer
Imprimer()
Case #Bouton_Sauvegarder
For i = 0 To ArraySize(PlatM())
AddElement(Lplats())
Lplats() = PlatM(i, 0)
Lplats() = PlatM(i, 1)
AddElement(Lplats())
Lplats() = PlatS(i, 0)
Lplats() = PlatS(i, 1)
Next i
Sauvegarder()
Case #Bouton_Charger
Charger()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
EndSelect
EndSelect
ForEver