Page 1 sur 1

[OK] Demande d'aide pour Menu de la semaine

Publié : jeu. 07/avr./2016 9:19
par Micoute
Bonjour à tous,
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


Re: Menu de la semaine

Publié : jeu. 07/avr./2016 9:28
par Bernie
Salut Micoute
Impossible télécharger ton fichier
mon antivirus bloque la page
perso je prefere Dropbox pour mettre un fichier sur un serveur

Re: Menu de la semaine

Publié : jeu. 07/avr./2016 10:02
par Micoute

Re: Menu de la semaine

Publié : jeu. 07/avr./2016 11:51
par TazNormand
Bon, déjà attention au nom de fichier JSON avec tes dates "date_debut_semaine" et "date_fin_semaine" car chez moi elle contiennent des "/" et c'est un caractère "interdit" car il "définit" l'arborescence.

D'autre part, tu fais un

Code : Tout sélectionner

  InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
  InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
  jsonfic.s="Menu de la semaine du 11 au 12.Json"
  SaveJSON(#Fichier_Json, jsonfic)
Mais tu oublie le ComposeJSON avant le SaveJSON, essaie comme ça :

Code : Tout sélectionner

  InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
  InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
  jsonfic.s="Menu de la semaine du 11 au 12.Json"
  ComposeJSON(#Fichier_Json)
  SaveJSON(#Fichier_Json, jsonfic)
Concernant ton problème de double tableau, je ne vois pas 36 solutions : tableau à 2 dimensions, ou list/map !

Re: Menu de la semaine

Publié : jeu. 07/avr./2016 12:14
par TazNormand
Bon, j'ai modifié ton programme pour qu'il n'y ait plus qu'un seul tableau Plat(6,3), où Plat(n,0) et Plat(n,1) correspondent au midi et Plat(n,2) et Plat(n,3) au soir :

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 Plat.s(6, 3)

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), Plat())  
  ComposeJSON(#Fichier_Json)
  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, Plat(0,0))
      MLD_ImpText(120, 40, Plat(0,2))
      MLD_ImpText(40, 45, Plat(0,1))
      MLD_ImpText(120, 45, Plat(0,3))
      
      MLD_ImpText(40, 65, "Midi")
      MLD_ImpText(120, 65, "Soir")
      MLD_ImpText(10, 75, "Mardi ")
      MLD_ImpText(40, 75, Plat(1,0))
      MLD_ImpText(120, 75, Plat(1,2))
      MLD_ImpText(40, 80, Plat(1,1))
      MLD_ImpText(120, 80, Plat(1,3))
      
      MLD_ImpText(40, 100, "Midi")
      MLD_ImpText(120, 100, "Soir")
      MLD_ImpText(10, 110, "Mercredi ")
      MLD_ImpText(40, 110, Plat(2,0))
      MLD_ImpText(120, 110, Plat(2,2))
      MLD_ImpText(40, 115, Plat(2,1))
      MLD_ImpText(120, 115, Plat(2,3))
      
      MLD_ImpText(40, 135, "Midi")
      MLD_ImpText(120, 135, "Soir")
      MLD_ImpText(10, 145, "Jeudi ")
      MLD_ImpText(40, 145, Plat(3,0))
      MLD_ImpText(120, 145, Plat(3,2))
      MLD_ImpText(40, 150, Plat(3,1))
      MLD_ImpText(120, 150, Plat(3,3))
      
      MLD_ImpText(40, 170, "Midi")
      MLD_ImpText(120, 170, "Soir")
      MLD_ImpText(10, 180, "Vendredi ")
      MLD_ImpText(40, 180, Plat(4,0))
      MLD_ImpText(120, 180, Plat(4,2))
      MLD_ImpText(40, 185, Plat(4,1))
      MLD_ImpText(120, 185, Plat(4,3))
      
      MLD_ImpText(40, 205, "Midi")
      MLD_ImpText(120, 205, "Soir")
      MLD_ImpText(10, 215, "Samedi ")
      MLD_ImpText(40, 215, Plat(5,0))
      MLD_ImpText(120, 215, Plat(5,2))
      MLD_ImpText(40, 220, Plat(5,1))
      MLD_ImpText(120, 220, Plat(5,3))
      
      MLD_ImpText(40, 240, "Midi")
      MLD_ImpText(120, 240, "Soir")
      MLD_ImpText(10, 250, "Dimanche ")
      MLD_ImpText(40, 250, Plat(6,0))
      MLD_ImpText(120, 250, Plat(6,2))
      MLD_ImpText(40, 255, Plat(6,1))
      MLD_ImpText(120, 255, Plat(6,3))
      
      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
          Plat(0, 0) = GetGadgetText(#Str_Lundi_Midi_Plat1)
        Case #Str_Lundi_Midi_Plat2
          Plat(0, 1) = GetGadgetText(#Str_Lundi_Midi_Plat2)
        Case #Str_Lundi_Soir_Plat1
          Plat(0, 2) = GetGadgetText(#Str_Lundi_Soir_Plat1)
        Case #Str_Lundi_Soir_Plat2
          Plat(0, 3) = GetGadgetText(#Str_Lundi_Soir_Plat2)
          
        Case #Str_Mardi_Midi_Plat1
          Plat(1, 0) = GetGadgetText(#Str_Mardi_Midi_Plat1)
        Case #Str_Mardi_Midi_Plat2
          Plat(1, 1) = GetGadgetText(#Str_Mardi_Midi_Plat2)
        Case #Str_Mardi_Soir_Plat1
          Plat(1, 2) = GetGadgetText(#Str_Mardi_Soir_Plat1)
        Case #Str_Mardi_Soir_Plat2
          Plat(1, 3) = GetGadgetText(#Str_Mardi_Soir_Plat2)
          
        Case #Str_Mercredi_Midi_Plat1
          Plat(2, 0) = GetGadgetText(#Str_Mercredi_Midi_Plat1)
        Case #Str_Mercredi_Midi_Plat2
          Plat(2, 1) = GetGadgetText(#Str_Mercredi_Midi_Plat2)
        Case #Str_Mercredi_Soir_Plat1
          Plat(2, 2) = GetGadgetText(#Str_Mercredi_Soir_Plat1)
        Case #Str_Mercredi_Soir_Plat2
          Plat(2, 3) = GetGadgetText(#Str_Mercredi_Soir_Plat2)
          
        Case #Str_Jeudi_Midi_Plat1
          Plat(3, 0) = GetGadgetText(#Str_Jeudi_Midi_Plat1)
        Case #Str_Jeudi_Midi_Plat2
          Plat(3, 1) = GetGadgetText(#Str_Jeudi_Midi_Plat2)
        Case #Str_Jeudi_Soir_Plat1
          Plat(3, 2) = GetGadgetText(#Str_Jeudi_Soir_Plat1)
        Case #Str_Jeudi_Soir_Plat2
          Plat(3, 3) = GetGadgetText(#Str_Jeudi_Soir_Plat2)
          
        Case #Str_Vendredi_Midi_Plat1
          Plat(4, 0) = GetGadgetText(#Str_Vendredi_Midi_Plat1)
        Case #Str_Vendredi_Midi_Plat2
          Plat(4, 1) = GetGadgetText(#Str_Vendredi_Midi_Plat2)
        Case #Str_Vendredi_Soir_Plat1
          Plat(4, 2) = GetGadgetText(#Str_Vendredi_Soir_Plat1)
        Case #Str_Vendredi_Soir_Plat2
          Plat(4, 3) = GetGadgetText(#Str_Vendredi_Soir_Plat2)
          
        Case #Str_Samedi_Midi_Plat1
          Plat(5, 0) = GetGadgetText(#Str_Samedi_Midi_Plat1)
        Case #Str_Samedi_Midi_Plat2
          Plat(5, 1) = GetGadgetText(#Str_Samedi_Midi_Plat2)
        Case #Str_Samedi_Soir_Plat1
          Plat(5, 2) = GetGadgetText(#Str_Samedi_Soir_Plat1)
        Case #Str_Samedi_Soir_Plat2
          Plat(5, 3) = GetGadgetText(#Str_Samedi_Soir_Plat2)
          
        Case #Str_Dimanche_Midi_Plat1
          Plat(6, 0) = GetGadgetText(#Str_Dimanche_Midi_Plat1)
        Case #Str_Dimanche_Midi_Plat2
          Plat(6, 1) = GetGadgetText(#Str_Dimanche_Midi_Plat2)
        Case #Str_Dimanche_Soir_Plat1
          Plat(6, 2) = GetGadgetText(#Str_Dimanche_Soir_Plat1)
        Case #Str_Dimanche_Soir_Plat2
          Plat(6, 3) = 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(Plat())
            AddElement(Lplats())
            Lplats() = Plat(i, 0)
            Lplats() = Plat(i, 1)
            AddElement(Lplats())
            Lplats() = Plat(i, 2)
            Lplats() = Plat(i, 3)
          Next i  
          Sauvegarder()
        Case #Bouton_Charger
          Charger()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver


J'édite mon message pour un dernier conseil : préfères les fichiers JSON structurés, c'est à dire avec un "nom" d'étiquette ({'lundi_midi': ['frites', 'steak], 'lundi_soir': ['soupe', 'fromage'], ...}) en utilisant les structures et les listes comme dans l'exemple de InsertJSONStructure(), le fichier JSON résultant n'en est que plus "lisible".

Re: Menu de la semaine

Publié : jeu. 07/avr./2016 12:24
par Micoute
Merci TazNormand, c'est tout simplement merveilleux.

Re: Menu de la semaine

Publié : jeu. 07/avr./2016 16:13
par Bernie
Micoute a écrit :Voilà qui est fait.

https://www.dropbox.com/s/3ttn65otqkg0j ... e.zip?dl=0

Merci Micoute

Re: [OK] Demande d'aide pour Menu de la semaine

Publié : jeu. 07/avr./2016 18:21
par Micoute
La version complète est dans 'Applications'