Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Micoute »

Bonjour à tous,
pour faire plus compact, j'ai ajouter les données dans une datasection

Code : Tout sélectionner

;Calendrier des fêtes fixes + Vector Drawing.pb

InitSprite() 
InitKeyboard()
InitMouse()
; 
Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets	;
  #Cnv
  #Bouton_Quitter
  #Police
  #Police2
  #Police_Lune
  #Police_Bouton_Quitter
EndEnumeration

Enumeration Fichier
  #FichierJson
EndEnumeration

Enumeration Actions 
  #f_sortie 
  #f_aucune 
EndEnumeration	

Enumeration Images
EndEnumeration 

Enumeration Table_de_verite
  #Faux
  #Vrai
EndEnumeration

#SecsParJour = 86400
Enumeration
  #Date_Annee
  #Date_Mois
  #Date_Semaine
  #Date_Jour
  #Date_Heure
  #Date_Minute
  #Date_Seconde
EndEnumeration

#Quantite = 365

Structure MaDate
  Jour.i
  Mois.i
  NSem.i ;Numéro de semaine
EndStructure

Structure Eph
  Prenom.s
  Quand.s
EndStructure  

Global annee.w
Global NumSem.b, NbJMR.b, date, NumJS
Global JourCourant.s, MoisCourant.s, DateCourante.s
Global Semaine.b
Global Masque.s = "%dddd %dd %mmm %yyyy" 
Global NomJours.s = "dimanche lundi mardi mercredi jeudi vendredi samedi"
Global NomJoursAbr.s = "dim lun mar mer jeu ven sam"
Global NomMois.s = "janvier février mars avril mai juin juillet août septembre octobre novembre décembre"
Global NomMoisAbr.s = "jan. fév. mars avr. mai juin juil. août sept. oct. nov. déc."

Global TaillePolice = 12
If LoadFont(#Police, "Calibri", TaillePolice, #PB_Font_Bold)
  Global Calibri_12 = FontID(#Police)
EndIf

Global Dim Mois$(12)
Global.MaDate Dim MaDonnee(365)
Global.Eph Dim Ephemeride(#Quantite)

;-
ExamineDesktops() 
Global Largeur_ecran = DesktopWidth(0) 
Global Hauteur_ecran = DesktopHeight(0) 
Global Prof_ecran = DesktopDepth(0) 
Global.s Fichier_de_donnees = "Data\Fetes_a_souhaiter.Json"

Global.b Quitter = #Faux

Global EspaceMois = Largeur_ecran / 6
Global CoulFond = $C0FFFF, CoulTexte, MoisEnCours = Month(Date()), Annee = Year(Date())
Global.s Masque = "%dddd %dd", Masque2 = "%dddd %dd %mmmm %yyyy", Texte$, JourSemaine, JourMois
Global V, W = 1, X = 0 , Y = 20, L = EspaceMois, H = 700, Z, i, Num_Mois, XX = X, YY = Y, F_principale_h, Resultat

Global.s DateJour, JourSemaine, JourMois, JourMois2
Global DizJourMois, UnJourMois

Declare Lire_les_donnees()
Declare.s ChaineDate(Masque.s, date.l)
Declare.b SiBissextile(Annee=-1) ; Retourne Vrai si l'année est une année bissextile (366 jours)
Declare.b JoursDansMois(annee=-1, mois=-1) ; Retourne le nombre de jours dans le mois donné (28 .. 31)
Declare TraitVertical(X, Y, Hauteur, Epaisseur = 1, Couleur = 0) ; Trace un trait vertical avec épaisseur et couleur choisies
Declare TraitHorizontal(X, Y, Longueur, Epaisseur = 1, Couleur = 0) ; Trace un trait horizontal avec épaisseur et couleur choisies
Declare Cadre(X, Y, Largeur, Hauteur, Epaisseur = 1, CouleurCadre = 0); Trace un cadre simple de la couleur choisie
Declare CadreColore(X, Y, Largeur, Hauteur, Epaisseur = 1, CouleurCadre = 0, CouleurFond = 0); Trace un cadre plein avec la couleur choisie
Declare Calculer()
Declare.i MonJDS (date.i)
Declare.i NumSem(date.i)
Declare CalculerNumSem()
Declare Affiche(Annee)

Macro Si(expression,Vrai,Faux)
  If Bool(expression)
    Vrai
  Else
    Faux
  EndIf
EndMacro

Procedure Calculer()
  
  CadreColore(XX, YY - 20, EspaceMois, H, 1, $000000, $C0FFFF) ; Cadre du calendrier
  
  ; Initialiser les noms de mois
  For i = 1 To 12
    Mois$(i) = StringField(NomMois.s, i, " ")
    Mois$(i) = UCase(Left(Mois$(i), 1)) + Mid(Mois$(i), 2)
  Next i
  
  ;Afficher les mois, du mois courant à la fin de l'année courante
  Num_Mois = MoisEnCours
  Affiche(Annee)
  XX = 0
  
  ;- Hiver 
  Select Mois$(MoisEnCours)
    Case "Janvier", "Février", "Décembre"
      ; hiver 2
      CoulFond = $EEEEEE
      
      ;- Printemps
    Case "Mars", "Avril", "Mai"
      ; printemps 1
      CoulFond = $72D772
      
      ;- été
    Case "Juin", "Juillet", "Août"
      ; été 1
      CoulFond = $00F0F0
      
      ;- Automne
    Case "Septembre", "Octobre", "Novembre"
      ; automne 1
      CoulFond = $81C5FE
  EndSelect
  
  CadreColore(XX, YY-20, EspaceMois, 20, 1, 0, CoulFond)
  VectorSourceColor(RGBA(0, 0, 0, 255))
  MovePathCursor((XX+(EspaceMois)/2)-VectorTextHeight(Mois$(MoisEnCours)) , YY-21)
  DrawVectorText(Mois$(MoisEnCours))
  
  XX = X
EndProcedure

Procedure.i MonJDS (date.i)
  Protected d.i
  
  d = DayOfWeek(date)
  If d = 0
    d = 7             ; pour le dimanche, retourne 7 au lieu de 0
  EndIf
  ProcedureReturn d
EndProcedure


Procedure.i NumSem(date.i)
  ; Les calculs sont basés sur le fait que la première semaine de l'année
  ; contient toujours le 4 Janvier.
  ; [conformément à http://en.wikipedia.org/wiki/Seven-day_week#Week_numbering
  ;  ou mieux    http://de.wikipedia.org/wiki/Woche#Kalenderwoche]
  
  Protected jda.i=DayOfYear(date), annee.i=Year(date)
  Protected DernPrec.i  ; dernier jour de la dernière semaine de l'année précédente
  Protected DernCour.i  ; dernier jour de la dernière semaine de l'année en cours
  
  DernPrec = 4 - MonJDS(Date(annee, 1, 4, 0,0,0))
  DernCour = 4 - MonJDS(Date(annee,12,28, 0,0,0)) + DayOfYear(Date(annee,12,31, 0,0,0))
  
  If jda <= DernCour
    If jda <= DernPrec
      ; Le jour donné est dans la dernière semaine de l'année précédente.
      jda + DayOfYear(Date(annee-1,12,31, 0,0,0))
      DernPrec = 4 - MonJDS(Date(annee-1,1,4, 0,0,0))
    EndIf
    ProcedureReturn Round((jda-DernPrec)/7, #PB_Round_Up)
  Else
    ; Le jour donné est dans la première semaine de l'année prochaine.
    ProcedureReturn 1
  EndIf
EndProcedure

Procedure CalculerNumSem()
  For j = 1 To 12
    For i = 1 To JoursDansMois(Year(Date()), j)
      MaDonnee(W-1)\Jour = i
      MaDonnee(W-1)\Mois = j
      MaDonnee(W-1)\NSem = NumSem(Date(Year(Date()), j, i, 0, 0, 0))
      W + 1
    Next i
  Next j 
EndProcedure

Procedure Affiche(Annee) 
  
  For i = 1 To JoursDansMois(Annee, Num_Mois)
    DateJour = ChaineDate(Masque, Date(Annee, Num_Mois, i, 0, 0, 0))
    JourSemaine = StringField(DateJour, 1, " ")
    JourSemaine = UCase(Left(JourSemaine, 1)) + Right(JourSemaine, Len(JourSemaine) - 1)
    JourMois = StringField(DateJour, 2, " ")
    DizJourMois = Val(Left(JourMois, 1))
    UnJourMois = Val(Right(JourMois ,1))
    
    Texte$ = ""
    
    Select JourSemaine ;- sélection Jds
      Case "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"
        VectorSourceColor(RGBA(0, 0, 0, 255))
        MovePathCursor(XX + 4, YY)
        DrawVectorText(LSet(JourSemaine, 2, " ") + "   ") ; Jours de semaine en noir
        If UnJourMois > 0 And DizJourMois
          MovePathCursor(XX + 28, YY)
          DrawVectorText(Str(DizJourMois)) ; dizaine du mois
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText(Str(UnJourMois)) ; Jour du mois
        ElseIf DizJourMois < 1
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText(Str(UnJourMois)) ; dizaine du mois
        ElseIf DizJourMois > 0 And UnJourMois = 0 ; 10 20 ou 30
          MovePathCursor(XX + 28, YY)
          DrawVectorText(Str(DizJourMois)) ; dizaine du mois
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText("0") ; Jour du mois			
        EndIf
        
      Case "Dimanche" ;- sélection dimanche
        VectorSourceColor(RGBA(255, 0, 0, 255))
        MovePathCursor(XX + 4, YY)
        DrawVectorText(LSet(JourSemaine, 2, " ") + "   ") ; dimanche en rouge
        If UnJourMois > 0 And DizJourMois
          MovePathCursor(XX + 28, YY)
          DrawVectorText(Str(DizJourMois)) ; dizaine du MoisEnCours
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText(Str(UnJourMois)) ; Jour du MoisEnCours
        ElseIf DizJourMois < 1
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText(Str(UnJourMois)) ; dizaine du MoisEnCours
        ElseIf DizJourMois > 0 And UnJourMois = 0 ; 10 20 ou 30
          MovePathCursor(XX + 28, YY)
          DrawVectorText(Str(DizJourMois)) ; dizaine du mois
          MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
          DrawVectorText("0") ; Jour du mois					
        EndIf
        TraitHorizontal(XX, YY + VectorTextHeight(" "), EspaceMois)
        V = DayOfYear(Date(Annee,Num_Mois,Val(JourMois),0,0,0))
        MovePathCursor(XX + 290, YY)
        DrawVectorText(Str(MaDonnee(V-1)\NSem))
    EndSelect
    
    ;- Fêtes fixes
    W = DayOfYear(Date(annee,Num_Mois,Val(JourMois),0,0,0))
    If SiBissextile(annee)
      w - 2
    Else
      w - 1
    EndIf  
    
    VectorSourceColor(RGBA(0, 0, 0, 255))
    
    If Ephemeride(w)\Quand = JourMois + "/" + RSet(Str(Num_Mois), 2, "0")
      MovePathCursor(XX + 70, YY)
      DrawVectorText(Ephemeride(w)\Prenom)
    EndIf
    
    VectorSourceColor(RGBA(255, 0, 0, 255))
    
    If JourMois = "01" And Num_Mois = 1  : MovePathCursor(XX + 70, YY) : DrawVectorText("Nouvel An") : EndIf		
    If JourMois = "01" And Num_Mois = 5  : MovePathCursor(XX + 70, YY) : DrawVectorText("Fête du travail") : EndIf
    If JourMois = "08" And Num_Mois = 5  : MovePathCursor(XX + 70, YY) : DrawVectorText("Victoire 1945") : EndIf		
    If JourMois = "14" And Num_Mois = 7  : MovePathCursor(XX + 70, YY) : DrawVectorText("Fête Nationale") : EndIf		
    If JourMois = "15" And Num_Mois = 8  : MovePathCursor(XX + 70, YY) : DrawVectorText("Assomption") : EndIf		
    If JourMois = "01" And Num_Mois = 11 : MovePathCursor(XX + 70, YY) : DrawVectorText("Toussaint") : EndIf		
    If JourMois = "11" And Num_Mois = 11 : MovePathCursor(XX + 70, YY) : DrawVectorText("Armistice 1918") : EndIf		
    If JourMois = "25" And Num_Mois = 12 : MovePathCursor(XX + 70, YY) : DrawVectorText("Noël") : EndIf
    
    If JourMois = RSet(Str(Day(Date())), 2, "0") And Num_Mois = Month(Date()) ;- AuJourd'hui
      Si(JourSemaine = "Dimanche", CoulTexte = RGBA(255, 0, 0, 255), CoulTexte = RGBA(0, 0, 0, 255)) ; Blanc sur fond rouge ou blanc
      
      VectorSourceColor(CoulTexte)
      MovePathCursor(XX + 4, YY)
      DrawVectorText(LSet(JourSemaine, 2, " ") + "    ")
      si(JourMois >= "10", JourMois = Left(JourMois, 2), JourMois = "  " + Right(JourMois, 1))
      Cadre(XX + 2, YY, EspaceMois-6, 20, 3)
      MovePathCursor(XX + 28, YY)
      DrawVectorText(JourMois + " ")
    EndIf
    YY + VectorTextHeight(" ") + 2
  Next
  XX + EspaceMois
  YY = Y
EndProcedure

Procedure Ouvrir_Fenetre_Principale()
  ; 
  ; ouvrir une fenêtre maximisée
  ; 
  
  F_principale_h = OpenWindow(#Fenetre_principale, 0, 0, L, H, "Calendrier des fêtes fixes", 
                              #PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
  ; 
  ; ouvrir un canvas de la même taille que la fenêtre (c'est à dire couvrant l'ensemble)
  ; 
  
  CanvasGadget(#Cnv, 0, 0, L, H)
  
  StartVectorDrawing(CanvasVectorOutput(#Cnv))
  
  VectorFont(Calibri_12)
  
  CalculerNumSem()
  
  Calculer()
  
  StopVectorDrawing()
EndProcedure

Lire_les_donnees()

Ouvrir_Fenetre_Principale()

;- 
;- gestion des événements en boucle sans fin
; 

Global action.i = #f_aucune 
Repeat 
  Global event.i = WindowEvent() 
  Select event 
    Case #PB_Event_CloseWindow 
      action = #f_sortie  
  EndSelect 
Until action = #f_sortie 
; 
; fermer la fenêtre en douceur
; 

CloseWindow(#Fenetre_principale)

;
; procédures
;

Procedure Lire_les_donnees()
  Restore fetes	
  For I = 0 To #Quantite
    Read.s Ephemeride(I)\Prenom
    Read.s Ephemeride(I)\Quand
  Next i  
EndProcedure

Procedure.s ChaineDate(Masque.s, date.l) 
  
  Masque = ReplaceString (Masque, "%dddd" , StringField ( NomJours , DayOfWeek (date) + 1, " " )) 
  Masque = ReplaceString (Masque, "%ddd" , StringField ( NomJoursAbr , DayOfWeek (date) + 1, " " )) 
  Masque = ReplaceString (Masque, "%mmmm" , StringField ( NomMois , Month (date), " " )) 
  Masque = ReplaceString (Masque, "%mmm" , StringField ( NomMoisAbr , Month (date), " " )) 
  
  ProcedureReturn FormatDate (Masque, date) 
  
EndProcedure

Procedure.b SiBissextile(Annee=-1)
  ; Retourne Vrai si l'année est une année bissextile (366 jours)
  ; S'il n'y a aucun argument, l'année en cours est utilisée
  ;   Dans le calendrier grégorien, l'année bissextile est
  ;   toute année divisible par 4, sauf
  ;   année du centenaire non divisible par 400
  ; L'année équinoxe de printemps est d'environ 365.242374 jours longs (et croissants)
  
  If Annee<=0: Annee = Year(Date()): EndIf ; Cette année
  If (Mod(Annee,4)=0 And Mod(Annee,100)<>0) Or (Mod(Annee,400)=0)
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure.b JoursDansMois(annee=-1, mois=-1)
  ; Retourne le nombre de jours dans le mois donné (28 .. 31)
  ; Si l'année est absente, l'année en cours est utilisée
  ; Si l'année est présente mais le mois est absent, février est utilisé
  ; Si l'année et le mois sont tous deux absents, le mois courant de l'année en cours est utilisé
  Protected Jours
  If annee<=0
    annee = Year(Date())
    If mois<=0: mois = Month(Date()): EndIf
  Else
    If mois<=0: mois = 2: EndIf
  EndIf
  If mois=2
    Jours = 28+SiBissextile(annee);
  Else
    jours = 31-$A55>>mois&1
  EndIf
  ProcedureReturn jours
EndProcedure

Procedure TraitHorizontal(X, Y, Largeur, Epaisseur = 1, Couleur = 0)
  MovePathCursor(X, Y) ; Déplace le curseur au nouvel emplacement
  AddPathLine(Largeur, 0, #PB_Path_Relative) ; Ajouter une ligne droite de la position actuelle aux coordonnées données
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure TraitVertical(X, Y, Hauteur, Epaisseur = 1, Couleur = 0)
  MovePathCursor(X, Y) ; Déplace le curseur au nouvel emplacement
  AddPathLine(0, Hauteur, #PB_Path_Relative) ; Ajouter une ligne droite de la position actuelle aux coordonnées données
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure Cadre(X, Y, Largeur, Hauteur, Epaisseur = 1, Couleur = 0)
  AddPathBox(X, Y, Largeur, Hauteur)
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure CadreColore(x, y, Largeur, Hauteur, Epaisseur=1, CouleurCadre=0, CouleurFond=0); Trace un cadre plein avec la couleur choisie
  Cadre(x+(Epaisseur/2), y+(Epaisseur/2), Largeur-(Epaisseur), Hauteur-(Epaisseur), Epaisseur, CouleurCadre)
  ;Remplir le cadre
  AddPathBox(x+Epaisseur, y+Epaisseur, Largeur-(Epaisseur*2), Hauteur-(Epaisseur*2))
  VectorSourceColor(RGBA(Red(CouleurFond), Green(CouleurFond), Blue(CouleurFond), 255))
  FillPath()
EndProcedure

DataSection  
  fetes:
  Data.s "","01/01", "Basile","02/01","Geneviève","03/01","Odilon","04/01","Edouard","05/01","Mélaine","06/01","Raymond","07/01"
  Data.s "Lucien","08/01","Alix","09/01","Guillaume","10/01","Pauline","11/01","Tatiana","12/01","Yvette","13/01","Nina","14/01"
  Data.s "Rémi","15/01","Marcel","16/01","Roseline","17/01","Prisca","18/01","Marius","19/01","Sébastien","20/01","Agnès","21/01"
  Data.s "Vincent","22/01","Barnard","23/01","François de Sales","24/01","Conversion de Paul","25/01","Paule","26/01","Angèle","27/01","Thomas d'Aquin","28/01"
  Data.s "Gildas","29/01","Martine","30/01","Marcelle","31/01"
  
  Data.s "Ella","01/02","Présentation","02/02","Blaise","03/02","Véronique","04/02","Agathe","05/02","Gaston","06/02","Eugènie","07/02"
  Data.s "Jacqueline","08/02","Apolline","09/02","Arnaud","10/02","Notre Dame de Lourdes","11/02","Félix","12/02","Béatrice","13/02","Valentin","14/02"
  Data.s "Claude","15/02","Julienne","16/02","Alexis","17/02","Bernadette","18/02","Gabin","19/02","Aimée","20/02","Damien","21/02"
  Data.s "Isabelle","22/02","Lazare","23/02","Modeste","24/02","Roméo","25/02","Nestor","26/02","Honorine","27/02","Romain","28/02"
  
  Data.s "Aubin","01/03","Charles le Bon","02/03","Guénolé","03/03","Casimir","04/03","Olive","05/03","Colette","06/03","Félicité","07/03"
  Data.s "Jean de Dieu","08/03","Françoise","09/03","Vivien","10/03","Rosine","11/03","Justine","12/03","Rodrigue","13/03","Mathilde","14/03"
  Data.s "Louise","15/03","Bénédicte","16/03","Patrice","17/03","Cyrille","18/03","Joseph","19/03","Anatole","20/03","Clémence","21/03"
  Data.s "Léa","22/03","Victorien","23/03","Catherine","24/03","Annonciation","25/03","Larissa","26/03","Habib","27/03","Gontran","28/03"
  Data.s "Gwladys","29/03","Amédée","30/03","Benjamin","31/03"
  
  Data.s "Hugues","01/04","Sandrine","02/04","Richard","03/04","Isidore","04/04","Irène","05/04","Marcellin","06/04","Jean-Baptiste de la Salle","07/04"
  Data.s "Julie","08/04","Gautier","09/04","Fulbert","10/04","Stanislas","11/04","Jules","12/04","Ida","13/04","Maxime","14/04"
  Data.s "Paterne","15/04","Benoît-Joseph","16/04","Anicet","17/04","Parfait","18/04","Emma","19/04","Odette","20/04","Anselme","21/04"
  Data.s "Alexandre","22/04","Georges","23/04","Fidèle","24/04","Marc","25/04","Alida","26/04","Zita","27/04","Valérie","28/04"
  Data.s "Catherine de Sienne","29/04","Robert","30/04"
  
  Data.s "", "01/05","Boris","02/05","Philippe / Jacques","03/05","Sylvain","04/05","Judith","05/05","Prudence","06/05","Gisèle","07/05"
  Data.s "","08/05","Pacôme","09/05","Solange","10/05","Estelle","11/05","Achille","12/05","Rolande","13/05","Matthias","14/05"
  Data.s "Denise","15/05","Honoré","16/05","Pascal","17/05","Eric","18/05","Yves","19/05","Bernardin","20/05","Constantin","21/05"
  Data.s "Emile","22/05","Didier","23/05","Donatien","24/05","Sophie","25/05","Bérenger","26/05","Augustin","27/05","Germain","28/05"
  Data.s "Aymar","29/05","Ferdinand","30/05","Visitation de la Sainte Vierge","31/05"
  
  Data.s "Justin","01/06","Blandine","02/06","Kévin","03/06","Clotilde","04/06","Igor","05/06","Norbert","06/06","Gilbert","07/06"
  Data.s "Médard","08/06","Diane","09/06","Landry","10/06","Barnabé","11/06","Guy","12/06","Antoine de Padoue","13/06","Elisée","14/06"
  Data.s "Germaine","15/06","Jean-François / Régis","16/06","Hervé","17/06","Léonce","18/06","Romuald","19/06","Silvère","20/06","Héraclide / Rodolphe","21/06"
  Data.s "Alban","22/06","Audrey","23/06","Jean-Baptiste","24/06","Prosper","25/06","Anthelme","26/06","Fernand","27/06","Irénée","28/06"
  Data.s "Pierre / Paul","29/06","Martial","30/06"
  
  Data.s "Thierry","01/07","Martinien","02/07","Thomas","03/07","Florent","04/07","Antoine","05/07","Mariette","06/07","Raoul","07/07"
  Data.s "Thibault","08/07","Amandine","09/07","Ulrich","10/07","Benoît","11/07","Olivier","12/07","Henri / Joël","13/07","","14/07"
  Data.s "Donald","15/07","Notre Dame du Mont Carmel","16/07","Charlotte","17/07","Frédéric","18/07","Arsène","19/07","Marina","20/07","Victor","21/07"
  Data.s "Marie-Madeleine","22/07","Brigitte","23/07","Christine","24/07","Jacques","25/07","Anne / Joachin","26/07","Nathalie","27/07","Samson","28/07"
  Data.s "Marthe","29/07","Juliette","30/07","Ignace de Loyola","31/07"
  
  Data.s "Alphonse","01/08","Julien / Eymard","02/08","Lydie","03/08","Jean-Marie Vianney","04/08","Abel","05/08","Transfiguration","06/08","Gaétan","07/08"
  Data.s "Dominique","08/08","Amour","09/08","Laurent","10/08","Claire","11/08","Clarisse","12/08","Hippolyte","13/08","Evrard","14/08"
  Data.s "","15/08","Armel","16/08","Hyacinthe","17/08","Hélène","18/08","Jean-Eudes","19/08","Bernard","20/08","Christophe","21/08"
  Data.s "Fabrice","22/08","Rose de Lima","23/08","Barthélémy","24/08","Louis","25/08","Natacha","26/08","Monique","27/08","Augustin","28/08"
  Data.s "Sabine","29/08","Fiacre","30/08","Aristide","31/08"
  
  Data.s "Gilles","01/09","Ingrid","02/09","Grégoire","03/09","Rosalie","04/09","Raïssa","05/09","Bertrand","06/09","Reine","07/09"
  Data.s "Nativité","08/09","Alain","09/09","Inès","10/09","Adelphe","11/09","Apollinaire","12/09","Aimé","13/09","Croix Glorieuse","14/09"
  Data.s "Roland","15/09","Edith","16/09","Renaud","17/09","Nadège","18/09","Emilie","19/09","Davy","20/09","Matthieu","21/09"
  Data.s "Maurice","22/09","Constant", "23/09","Thècle","24/09","Hermann","25/09","Côme / Damien","26/09","Vincent de Paul","27/09","Venceslas","28/09"
  Data.s "Michel / Gabriel / Raphaël","29/09","Jérôme","30/09"
  
  Data.s "Thérèse de l' Enfant Jésus","01/10","Léger","02/10","Gérard","03/10","François d'Assise","04/10","Fleur","05/10","Bruno","06/10","Serge","07/10"
  Data.s "Pélagie","08/10","Denis","09/10","Ghislain","10/10","Firmin","11/10","Wilfried","12/10","Géraud","13/10","Juste","14/10"
  Data.s "Thérèse d'Avila","15/10","Edwige","16/10","Baudoin","17/10","Luc","18/10","René","19/10","Adeline","20/10","Céline","21/10"
  Data.s "Elodie","22/10","Jean de Capistran","23/10","Florentin","24/10","Crépin","25/10","Dimitri","26/10","Emeline","27/10","Jude","28/10"
  Data.s "Narcisse","29/10","Bienvenu","30/10","Quentin","31/10"
  
  Data.s "","01/11","Défunts","02/11","Hubert","03/11","Charles","04/11","Sylvie","05/11","Bertille","06/11","Carine","07/11"
  Data.s "Geoffroy","08/11","Théodore","09/11","Léon","10/11","","11/11","Christian","12/11","Brice","13/11","Sidoine","14/11"
  Data.s "Albert","15/11","Marguerite","16/11","Elisabeth","17/11","Aude","18/11","Tanguy","19/11","Edmond","20/11","Christ Roi / Prés de Marie", "21/11"
  Data.s "Cécile","22/11","Clément","23/11","Flora","24/11","Catherine","25/11","Delphine","26/11","Sévrin","27/11","Jacques de la Marche","28/11"
  Data.s "Saturnin","29/11","André","30/11"
  
  Data.s "Florence","01/12","Viviane","02/12","François-Xavier","03/12","Barbara","04/12","Gérald","05/12","Nicolas","06/12","Ambroise","07/12"
  Data.s "Immaculée Conception","08/12","Pierre Fourier","09/12","Romaric","10/12","Daniel","11/12","Jeanne-Françoise de Chantal","12/12","Lucie","13/12","Odile","14/12"
  Data.s "Ninon","15/12","Alice","16/12","Gaël","17/12","Gatien","18/12","Urbain","19/12","Théophile","20/12","Pierre Canisius", "21/12"
  Data.s "Françoise-Xavière","22/12","Armand","23/12","Adèle","24/12","Emmanuel", "25/12","Etienne","26/12","Jean","27/12","Innocents","28/12"
  Data.s "David","29/12","Roger","30/12","Sylvestre","31/12","Auguste","29/02"
EndDataSection
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Anonyme2 »

Le code est bien plus clair, Merci Micoute.

Il manque un SpinGadget() pour choisir le mois que l'on veut visualiser et une recherche sur un prénom pour faire apparaître le mois correspondant :roll:

T'est pas obligé de faire ca :mrgreen:
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Marc56 »

Bonjour Micoute,
Ça devient un concours à force de diminuer le code :P

Une suggestion: Considérant que tu as une structure à seulement deux éléments,

Code : Tout sélectionner

Structure Eph
  Prenom.s
  Quand.s
EndStructure  
Ce serait peut-être l'occasion d'utiliser une Map ? C'est l'utilisation type.

Je ne sais pas si ça irait plus vite ou serait plus simple, mais c'est l'occasion d'étudier un nouveau truc et voir si ça peut rendre encore plus lisible le code.

Enjoy
:)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Micoute »

Merci beaucoup à tous,

grâce à vos réponses judicieuses, je sens que je vais progresser, peut-être pas au niveau que j'avais avant mon avc et mes 2 infarctus, mais quand je vous lis, mon esprit s'éveille et analyse déjà comment utiliser vos conseils avisés.

@Denis, ton idée de SpinGadget() , n'est pas bête et je pense même que je pourrais en mettre 2, car toutes les années, tout comme les mois, ne sont pas identiques.

@Marc56, c'est vrai qu'avec ma structure Eph, je peux faire facilement une map, car il y a le minimum d'éléments pour le faire.

@Spock, ce ne sont même pas que des conseils que tu me donnes, c'est carrément du travail prêt à l'emploi, je te remercie grandement pour ça.

Il y a plus dans vos cerveaux valides que dans le mien très abîmé, mais qui se répare au fil des jours.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Ar-S »

C'est claire que tes codes précédents sur ce prog m'avaient rebuté vu leur taille, celui ci devient lisible, c'est plus propre et claire.
+1 pour les macros (et procedures) pour éviter les surcharges de répétitions.

P.S : Pour alléger ton IDE et la navigation dans ton code, n'hésite à mettre tes datas sections dans un PBI à part puis de l'inclure dans ton code principale.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par falsam »

Ar-S a écrit :Pour alléger ton IDE et la navigation dans ton code, n'hésite à mettre tes datas sections dans un PBI à part puis de l'inclure dans ton code principale
ou dans un fichier JSON.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Micoute »

Merci encore pour les conseils, j'ai fait avancer le travail au mieux de mes connaissances, car j'ai un problème d'affichage quand j'utilise les spins parce qu'il y a déjà quelque chose d'affiché.

Je vous soumet donc mon ouvrage inachevé, mais bien avancé.

Code : Tout sélectionner

;Calendrier des fêtes fixes + Vector Drawing.pb

InitSprite() 
InitKeyboard()
InitMouse()
; 
Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets	;
  #Cnv
  #Bouton_Quitter
  #Spin_Annee
  #Spin_Mois
  #Police
  #Police2
  #Police_Bouton_Quitter
EndEnumeration

Enumeration Fichier
  #FichierJson
EndEnumeration 

Enumeration Actions 
  #f_sortie 
  #f_aucune 
EndEnumeration 

Enumeration Table_de_verite
  #Faux
  #Vrai
EndEnumeration

#SecsParJour = 86400

Enumeration
  #Date_Annee
  #Date_Mois
  #Date_Semaine
  #Date_Jour
  #Date_Heure
  #Date_Minute
  #Date_Seconde
EndEnumeration

#Quantite = 365

Structure MaDate
  Jour.i
  Mois.i
  NSem.i ;Numéro de semaine
EndStructure

Structure Eph
  Prenom.s
  Quand.s
EndStructure  

Global annee.w
Global NumSem.b, NbJMR.b, date, NumJS
Global JourCourant.s, MoisCourant.s, DateCourante.s
Global Semaine.b
Global Masque.s = "%dddd %dd %mmm %yyyy" 
Global NomJours.s = "dimanche lundi mardi mercredi jeudi vendredi samedi"
Global NomJoursAbr.s = "dim lun mar mer jeu ven sam"
Global NomMois.s = "janvier février mars avril mai juin juillet août septembre octobre novembre décembre"
Global NomMoisAbr.s = "jan. fév. mars avr. mai juin juil. août sept. oct. nov. déc."

Global TaillePolice = 12
If LoadFont(#Police, "Calibri", TaillePolice, #PB_Font_Bold)
  Global Calibri_12 = FontID(#Police)
EndIf

Global Dim Mois$(12)
Global.MaDate Dim MaDonnee(365)
Global.Eph Dim Ephemeride(#Quantite)
Global.s NewMap Fete()

;-
ExamineDesktops() 
Global Largeur_ecran = DesktopWidth(0) 
Global Hauteur_ecran = DesktopHeight(0) 
Global Prof_ecran = DesktopDepth(0) 

Global.s Fichier_de_donnees = "Data\Fetes_a_souhaiter.Json"

Global.b Quitter = #Faux

Global EspaceMois = Largeur_ecran / 6
Global CoulFond = $C0FFFF, CoulTexte, MoisEnCours = Month(Date()), Annee = Year(Date())
Global.s Masque = "%dddd %dd", Masque2 = "%dddd %dd %mmmm %yyyy", Texte$, JourSemaine, JourMois
Global V, W = 1, X = 0 , Y = 20, L = EspaceMois, H = 700, Z, i, Num_Mois, XX = X, YY = Y, F_principale_h, Resultat

Global.s DateJour, JourSemaine, JourMois, JourMois2
Global DizJourMois, UnJourMois

Declare Lire_les_donnees()
Declare.s ChaineDate(Masque.s, date.l)
Declare.b SiBissextile(Annee=-1) ; Retourne Vrai si l'année est une année bissextile (366 jours)
Declare.b JoursDansMois(annee=-1, mois=-1) ; Retourne le nombre de jours dans le mois donné (28 .. 31)
Declare TraitVertical(X, Y, Hauteur, Epaisseur = 1, Couleur = 0) ; Trace un trait vertical avec épaisseur et couleur choisies
Declare TraitHorizontal(X, Y, Longueur, Epaisseur = 1, Couleur = 0) ; Trace un trait horizontal avec épaisseur et couleur choisies
Declare Cadre(X, Y, Largeur, Hauteur, Epaisseur = 1, CouleurCadre = 0); Trace un cadre simple de la couleur choisie
Declare CadreColore(X, Y, Largeur, Hauteur, Epaisseur = 1, CouleurCadre = 0, CouleurFond = 0); Trace un cadre plein avec la couleur choisie
Declare Calculer()
Declare.i MonJDS (date.i)
Declare.i NumSem(date.i)
Declare CalculerNumSem()
Declare Affiche(Annee)

Macro Si(expression,Vrai,Faux)
  If Bool(expression)
    Vrai
  Else
    Faux
  EndIf
EndMacro

Macro se
  Si(JourSemaine = "Dimanche", VectorSourceColor(RGBA(255, 0, 0, 255)), VectorSourceColor(RGBA(0, 0, 0, 255)))
  
  MovePathCursor(XX + 4, YY)
  DrawVectorText(LSet(JourSemaine, 2, " ") + "   ") ; Jours de semaine en noir
  If UnJourMois > 0 And DizJourMois
    MovePathCursor(XX + 28, YY)
    DrawVectorText(Str(DizJourMois)) ; dizaine du mois
    MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
    DrawVectorText(Str(UnJourMois)) ; Jour du mois
  ElseIf DizJourMois < 1
    MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
    DrawVectorText(Str(UnJourMois)) ; dizaine du mois
  ElseIf DizJourMois > 0 And UnJourMois = 0 ; 10 20 ou 30
    MovePathCursor(XX + 28, YY)
    DrawVectorText(Str(DizJourMois)) ; dizaine du mois
    MovePathCursor(XX + 28 + VectorTextWidth("0"), YY)
    DrawVectorText("0") ; Jour du mois         
  EndIf
EndMacro

Procedure Init()
  ; Initialiser les noms de mois
  For i = 1 To 12
    Mois$(i) = StringField(NomMois.s, i, " ")
    Mois$(i) = UCase(Left(Mois$(i), 1)) + Mid(Mois$(i), 2)
  Next i
EndProcedure  
  
Procedure Calculer()
  CadreColore(XX, YY - 20, EspaceMois, H, 1, $000000, $C0FFFF) ; Cadre du calendrier
  
  
  ;Afficher les mois, du mois courant à la fin de l'année courante
  Num_Mois = MoisEnCours
  Affiche(Annee)
  XX = 0
  
  ;- Hiver 
  Select Mois$(MoisEnCours)
    Case "Janvier", "Février", "Décembre"
      ; hiver 2
      CoulFond = $EEEEEE
      
      ;- Printemps
    Case "Mars", "Avril", "Mai"
      ; printemps 1
      CoulFond = $72D772
      
      ;- été
    Case "Juin", "Juillet", "Août"
      ; été 1
      CoulFond = $00F0F0
      
      ;- Automne
    Case "Septembre", "Octobre", "Novembre"
      ; automne 1
      CoulFond = $81C5FE
  EndSelect
  
  CadreColore(XX, YY-20, EspaceMois, 20, 1, 0, CoulFond)
  VectorSourceColor(RGBA(0, 0, 0, 255))
  MovePathCursor((XX+(EspaceMois)/2)-VectorTextHeight(Mois$(MoisEnCours)) , YY-21)
  DrawVectorText(Mois$(MoisEnCours))
  
  XX = X
EndProcedure

Procedure.i MonJDS (date.i)
  Protected d.i
  
  d = DayOfWeek(date)
  If d = 0
    d = 7             ; pour le dimanche, retourne 7 au lieu de 0
  EndIf
  ProcedureReturn d
EndProcedure


Procedure.i NumSem(date.i)
  ; Les calculs sont basés sur le fait que la première semaine de l'année
  ; contient toujours le 4 Janvier.
  ; [conformément à http://en.wikipedia.org/wiki/Seven-day_week#Week_numbering
  ;  ou mieux    http://de.wikipedia.org/wiki/Woche#Kalenderwoche]
  
  Protected jda.i=DayOfYear(date), annee.i=Year(date)
  Protected DernPrec.i  ; dernier jour de la dernière semaine de l'année précédente
  Protected DernCour.i  ; dernier jour de la dernière semaine de l'année en cours
  
  DernPrec = 4 - MonJDS(Date(annee, 1, 4, 0,0,0))
  DernCour = 4 - MonJDS(Date(annee,12,28, 0,0,0)) + DayOfYear(Date(annee,12,31, 0,0,0))
  
  If jda <= DernCour
    If jda <= DernPrec
      ; Le jour donné est dans la dernière semaine de l'année précédente.
      jda + DayOfYear(Date(annee-1,12,31, 0,0,0))
      DernPrec = 4 - MonJDS(Date(annee-1,1,4, 0,0,0))
    EndIf
    ProcedureReturn Round((jda-DernPrec)/7, #PB_Round_Up)
  Else
    ; Le jour donné est dans la première semaine de l'année prochaine.
    ProcedureReturn 1
  EndIf
EndProcedure

Procedure CalculerNumSem()
  For j = 1 To 12
    For i = 1 To JoursDansMois(Year(Date()), j)
      MaDonnee(W-1)\Jour = i
      MaDonnee(W-1)\Mois = j
      MaDonnee(W-1)\NSem = NumSem(Date(Year(Date()), j, i, 0, 0, 0))
      W + 1
    Next i
  Next j 
EndProcedure

Procedure Affiche(Annee) 
  
  For i = 1 To JoursDansMois(Annee, Num_Mois)
    DateJour = ChaineDate(Masque, Date(Annee, Num_Mois, i, 0, 0, 0))
    JourSemaine = StringField(DateJour, 1, " ")
    JourSemaine = UCase(Left(JourSemaine, 1)) + Right(JourSemaine, Len(JourSemaine) - 1)
    JourMois = StringField(DateJour, 2, " ")
    DizJourMois = Val(Left(JourMois, 1))
    UnJourMois = Val(Right(JourMois ,1))
    
    Select JourSemaine ;- sélection Jds    
      Case "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"
        se
      Case "Dimanche" ;- sélection dimanche
        se
        TraitHorizontal(XX, YY + VectorTextHeight(" "), EspaceMois)
        V = DayOfYear(Date(Annee,Num_Mois,Val(JourMois),0,0,0))
        MovePathCursor(XX + 290, YY)
        DrawVectorText(Str(MaDonnee(V-1)\NSem))
    EndSelect
    
    ;- Fêtes fixes
    W = DayOfYear(Date(annee,Num_Mois,Val(JourMois),0,0,0))
    If SiBissextile(annee)
      w - 2
    Else
      w - 1
    EndIf  
    
    VectorSourceColor(RGBA(0, 0, 0, 255)) ;Couleur du texte noire
    MovePathCursor(XX + 70, YY) ; déplacer le curseur à la position adéquate
    DrawVectorText(Fete(JourMois+"/"+RSet(Str(Num_Mois), 2, "0"))) ;Affichage de la fête à souhaiter
    
    VectorSourceColor(RGBA(255, 0, 0, 255)) ;Couleur du texte rouge
    
    If JourMois = "01" And Num_Mois = 1  : MovePathCursor(XX + 70, YY) : DrawVectorText("Nouvel An") : EndIf		
    If JourMois = "01" And Num_Mois = 5  : MovePathCursor(XX + 70, YY) : DrawVectorText("Fête du travail") : EndIf
    If JourMois = "08" And Num_Mois = 5  : MovePathCursor(XX + 70, YY) : DrawVectorText("Victoire 1945") : EndIf		
    If JourMois = "14" And Num_Mois = 7  : MovePathCursor(XX + 70, YY) : DrawVectorText("Fête Nationale") : EndIf		
    If JourMois = "15" And Num_Mois = 8  : MovePathCursor(XX + 70, YY) : DrawVectorText("Assomption") : EndIf		
    If JourMois = "01" And Num_Mois = 11 : MovePathCursor(XX + 70, YY) : DrawVectorText("Toussaint") : EndIf		
    If JourMois = "11" And Num_Mois = 11 : MovePathCursor(XX + 70, YY) : DrawVectorText("Armistice 1918") : EndIf		
    If JourMois = "25" And Num_Mois = 12 : MovePathCursor(XX + 70, YY) : DrawVectorText("Noël") : EndIf
    
     ;- Encadrer auJourd'hui
    If JourMois = RSet(Str(Day(Date())), 2, "0") And Num_Mois = Month(Date())
      Si(JourSemaine = "Dimanche", CoulTexte = RGBA(255, 0, 0, 255), CoulTexte = RGBA(0, 0, 0, 255)) ; Couleur du texte rouge ou noire selon le jour de la semaine
      
      VectorSourceColor(CoulTexte)
      MovePathCursor(XX + 4, YY)
      DrawVectorText(LSet(JourSemaine, 2, " ") + "    ")
      si(JourMois >= "10", JourMois = Left(JourMois, 2), JourMois = "  " + Right(JourMois, 1))
      Cadre(XX + 2, YY, EspaceMois-6, 20, 3)
      MovePathCursor(XX + 28, YY)
      DrawVectorText(JourMois + " ")
    EndIf
    
    YY + VectorTextHeight(" ") + 2
  Next
  XX + EspaceMois
  YY = Y
EndProcedure

Procedure DefinirAnnee()
  StartVectorDrawing(CanvasVectorOutput(#Cnv))
  annee = GetGadgetState(#Spin_Annee)
  Calculer()
  StopVectorDrawing()
EndProcedure

Procedure DefinirMois()
  StartVectorDrawing(CanvasVectorOutput(#Cnv))
  MoisEnCours = GetGadgetState(#Spin_Mois)
  Calculer()
  StopVectorDrawing()
EndProcedure

Procedure Ouvrir_Fenetre_Principale()
  ; 
  ; ouvrir une fenêtre maximisée
  ; 
  
  F_principale_h = OpenWindow(#Fenetre_principale, 0, 0, L, H + 30, "Calendrier des fêtes fixes", 
                              #PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
  ; 
  ; ouvrir un canvas de la même taille que la fenêtre (c'est à dire couvrant l'ensemble)
  ; 
  
  CanvasGadget(#Cnv, 0, 0, L, H)
  
  SpinGadget(#Spin_Annee, 10, H+5, (EspaceMois/2)-20, 20, 1970, 2038, #PB_Spin_Numeric)
  SpinGadget(#Spin_Mois, (EspaceMois/2)+10, H+5, (EspaceMois/2)-20, 20, 1, 12, #PB_Spin_Numeric)
  
  SetGadgetState(#Spin_Annee, annee)
  SetGadgetState(#Spin_Mois, MoisEnCours)
  
  
  StartVectorDrawing(CanvasVectorOutput(#Cnv))
  
  VectorFont(Calibri_12)
  
  Init()
  
  CalculerNumSem()
  
  Calculer()
    
  StopVectorDrawing()
  
  BindGadgetEvent(#Spin_Annee, @DefinirAnnee())
  BindGadgetEvent(#Spin_Mois, @DefinirMois())
EndProcedure

Lire_les_donnees()

Ouvrir_Fenetre_Principale()

;- 
;- gestion des événements en boucle sans fin
; 

Global action.i = #f_aucune 
Repeat 
  Global event.i = WindowEvent() 
  Select event 
    Case #PB_Event_CloseWindow 
      action = #f_sortie  
  EndSelect 
Until action = #f_sortie 
; 
; fermer la fenêtre en douceur
; 

CloseWindow(#Fenetre_principale)

;
; procédures
;

Procedure Lire_les_donnees()
  If ReadFile(#FichierJson, Fichier_de_donnees)
    CloseFile(#FichierJson)
    
    ;Lire un fichier JSON (Analyser les données JSON à partir d'un fichier)
    LoadJSON(#FichierJson, Fichier_de_donnees)
    
    ;Extraire les éléments dans le tableau spécifié
    ExtractJSONArray(JSONValue(#FichierJson), Ephemeride())
    
  For I = 0 To ArraySize( Ephemeride())
    AddMapElement(Fete(), Ephemeride(I)\Quand)
    Fete() = Ephemeride(I)\Prenom    
  Next
  Else
    action = #f_sortie
    MessageRequester("ATTENTION","Impossible de charger le fichier")
    End
  EndIf
EndProcedure

Procedure.s ChaineDate(Masque.s, date.l) 
  
  Masque = ReplaceString (Masque, "%dddd" , StringField ( NomJours , DayOfWeek (date) + 1, " " )) 
  Masque = ReplaceString (Masque, "%ddd" , StringField ( NomJoursAbr , DayOfWeek (date) + 1, " " )) 
  Masque = ReplaceString (Masque, "%mmmm" , StringField ( NomMois , Month (date), " " )) 
  Masque = ReplaceString (Masque, "%mmm" , StringField ( NomMoisAbr , Month (date), " " )) 
  
  ProcedureReturn FormatDate (Masque, date) 
  
EndProcedure

Procedure.b SiBissextile(Annee=-1)
  ; Retourne Vrai si l'année est une année bissextile (366 jours)
  ; S'il n'y a aucun argument, l'année en cours est utilisée
  ;   Dans le calendrier grégorien, l'année bissextile est
  ;   toute année divisible par 4, sauf
  ;   année du centenaire non divisible par 400
  ; L'année équinoxe de printemps est d'environ 365.242374 jours longs (et croissants)
  
  If Annee<=0: Annee = Year(Date()): EndIf ; Cette année
  If (Mod(Annee,4)=0 And Mod(Annee,100)<>0) Or (Mod(Annee,400)=0)
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure.b JoursDansMois(annee=-1, mois=-1)
  ; Retourne le nombre de jours dans le mois donné (28 .. 31)
  ; Si l'année est absente, l'année en cours est utilisée
  ; Si l'année est présente mais le mois est absent, février est utilisé
  ; Si l'année et le mois sont tous deux absents, le mois courant de l'année en cours est utilisé
  Protected Jours
  If annee<=0
    annee = Year(Date())
    If mois<=0: mois = Month(Date()): EndIf
  Else
    If mois<=0: mois = 2: EndIf
  EndIf
  If mois=2
    Jours = 28+SiBissextile(annee);
  Else
    jours = 31-$A55>>mois&1
  EndIf
  ProcedureReturn jours
EndProcedure

Procedure TraitHorizontal(X, Y, Largeur, Epaisseur = 1, Couleur = 0)
  MovePathCursor(X, Y) ; Déplace le curseur au nouvel emplacement
  AddPathLine(Largeur, 0, #PB_Path_Relative) ; Ajouter une ligne droite de la position actuelle aux coordonnées données
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure TraitVertical(X, Y, Hauteur, Epaisseur = 1, Couleur = 0)
  MovePathCursor(X, Y) ; Déplace le curseur au nouvel emplacement
  AddPathLine(0, Hauteur, #PB_Path_Relative) ; Ajouter une ligne droite de la position actuelle aux coordonnées données
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure Cadre(X, Y, Largeur, Hauteur, Epaisseur = 1, Couleur = 0)
  AddPathBox(X, Y, Largeur, Hauteur)
  VectorSourceColor(RGBA(Red(Couleur), Green(Couleur), Blue(Couleur), 255))
  StrokePath(Epaisseur)
EndProcedure

Procedure CadreColore(x, y, Largeur, Hauteur, Epaisseur=1, CouleurCadre=0, CouleurFond=0); Trace un cadre plein avec la couleur choisie
  Cadre(x+(Epaisseur/2), y+(Epaisseur/2), Largeur-(Epaisseur), Hauteur-(Epaisseur), Epaisseur, CouleurCadre)
  ;Remplir le cadre
  AddPathBox(x+Epaisseur, y+Epaisseur, Largeur-(Epaisseur*2), Hauteur-(Epaisseur*2))
  VectorSourceColor(RGBA(Red(CouleurFond), Green(CouleurFond), Blue(CouleurFond), 255))
  FillPath()
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier mensuel des fêtes fixes + Vector Drawing.pb

Message par Micoute »

J'oubliais le fichier Json:

Code : Tout sélectionner

[{"Prenom": "Jour de l'an", "Quand": "01/01"}, {"Prenom": "Basile", "Quand": "02/01"}, {"Prenom": "Geneviève", "Quand": "03/01"}, {"Prenom": "Odilon", "Quand": "04/01"}, {"Prenom": "Edouard", "Quand": "05/01"}, {"Prenom": "Mélaine", "Quand": "06/01"}, {"Prenom": "Raymond", "Quand": "07/01"}, {"Prenom": "Lucien", "Quand": "08/01"}, {"Prenom": "Alix", "Quand": "09/01"}, {"Prenom": "Guillaume", "Quand": "10/01"}, {"Prenom": "Pauline", "Quand": "11/01"}, {"Prenom": "Tatiana", "Quand": "12/01"}, {"Prenom": "Yvette", "Quand": "13/01"}, {"Prenom": "Nina", "Quand": "14/01"}, {"Prenom": "Rémi", "Quand": "15/01"}, {"Prenom": "Marcel", "Quand": "16/01"}, {"Prenom": "Roseline", "Quand": "17/01"}, {"Prenom": "Prisca", "Quand": "18/01"}, {"Prenom": "Marius", "Quand": "19/01"}, {"Prenom": "Sébastien", "Quand": "20/01"}, {"Prenom": "Agnès", "Quand": "21/01"}, {"Prenom": "Vincent", "Quand": "22/01"}, {"Prenom": "Barnard", "Quand": "23/01"}, {"Prenom": "François de Sales", "Quand": "24/01"}, {"Prenom": "Conversion de Paul", "Quand": "25/01"}, {"Prenom": "Paule", "Quand": "26/01"}, {"Prenom": "Angèle", "Quand": "27/01"}, {"Prenom": "Thomas d'Aquin", "Quand": "28/01"}, {"Prenom": "Gildas", "Quand": "29/01"}, {"Prenom": "Martine", "Quand": "30/01"}, {"Prenom": "Marcelle", "Quand": "31/01"}, {"Prenom": "Ella", "Quand": "01/02"}, {"Prenom": "Présentation", "Quand": "02/02"}, {"Prenom": "Blaise", "Quand": "03/02"}, {"Prenom": "Véronique", "Quand": "04/02"}, {"Prenom": "Agathe", "Quand": "05/02"}, {"Prenom": "Gaston", "Quand": "06/02"}, {"Prenom": "Eugènie", "Quand": "07/02"}, {"Prenom": "Jacqueline", "Quand": "08/02"}, {"Prenom": "Apolline", "Quand": "09/02"}, {"Prenom": "Arnaud", "Quand": "10/02"}, {"Prenom": "Notre Dame de Lourdes", "Quand": "11/02"}, {"Prenom": "Félix", "Quand": "12/02"}, {"Prenom": "Béatrice", "Quand": "13/02"}, {"Prenom": "Valentin", "Quand": "14/02"}, {"Prenom": "Claude", "Quand": "15/02"}, {"Prenom": "Julienne", "Quand": "16/02"}, {"Prenom": "Alexis", "Quand": "17/02"}, {"Prenom": "Bernadette", "Quand": "18/02"}, {"Prenom": "Gabin", "Quand": "19/02"}, {"Prenom": "Aimée", "Quand": "20/02"}, {"Prenom": "Damien", "Quand": "21/02"}, {"Prenom": "Isabelle", "Quand": "22/02"}, {"Prenom": "Lazare", "Quand": "23/02"}, {"Prenom": "Modeste", "Quand": "24/02"}, {"Prenom": "Roméo", "Quand": "25/02"}, {"Prenom": "Nestor", "Quand": "26/02"}, {"Prenom": "Honorine", "Quand": "27/02"}, {"Prenom": "Romain", "Quand": "28/02"}, {"Prenom": "Aubin", "Quand": "01/03"}, {"Prenom": "Charles le Bon", "Quand": "02/03"}, {"Prenom": "Guénolé", "Quand": "03/03"}, {"Prenom": "Casimir", "Quand": "04/03"}, {"Prenom": "Olive", "Quand": "05/03"}, {"Prenom": "Colette", "Quand": "06/03"}, {"Prenom": "Félicité", "Quand": "07/03"}, {"Prenom": "Jean de Dieu", "Quand": "08/03"}, {"Prenom": "Françoise", "Quand": "09/03"}, {"Prenom": "Vivien", "Quand": "10/03"}, {"Prenom": "Rosine", "Quand": "11/03"}, {"Prenom": "Justine", "Quand": "12/03"}, {"Prenom": "Rodrigue", "Quand": "13/03"}, {"Prenom": "Mathilde", "Quand": "14/03"}, {"Prenom": "Louise", "Quand": "15/03"}, {"Prenom": "Bénédicte", "Quand": "16/03"}, {"Prenom": "Patrice", "Quand": "17/03"}, {"Prenom": "Cyrille", "Quand": "18/03"}, {"Prenom": "Joseph", "Quand": "19/03"}, {"Prenom": "Anatole", "Quand": "20/03"}, {"Prenom": "Clémence", "Quand": "21/03"}, {"Prenom": "Léa", "Quand": "22/03"}, {"Prenom": "Victorien", "Quand": "23/03"}, {"Prenom": "Catherine", "Quand": "24/03"}, {"Prenom": "Annonciation", "Quand": "25/03"}, {"Prenom": "Larissa", "Quand": "26/03"}, {"Prenom": "Habib", "Quand": "27/03"}, {"Prenom": "Gontran", "Quand": "28/03"}, {"Prenom": "Gwladys", "Quand": "29/03"}, {"Prenom": "Amédée", "Quand": "30/03"}, {"Prenom": "Benjamin", "Quand": "31/03"}, {"Prenom": "Hugues", "Quand": "01/04"}, {"Prenom": "Sandrine", "Quand": "02/04"}, {"Prenom": "Richard", "Quand": "03/04"}, {"Prenom": "Isidore", "Quand": "04/04"}, {"Prenom": "Irène", "Quand": "05/04"}, {"Prenom": "Marcellin", "Quand": "06/04"}, {"Prenom": "Jean-Baptiste de la Salle", "Quand": "07/04"}, {"Prenom": "Julie", "Quand": "08/04"}, {"Prenom": "Gautier", "Quand": "09/04"}, {"Prenom": "Fulbert", "Quand": "10/04"}, {"Prenom": "Stanislas", "Quand": "11/04"}, {"Prenom": "Jules", "Quand": "12/04"}, {"Prenom": "Ida", "Quand": "13/04"}, {"Prenom": "Maxime", "Quand": "14/04"}, {"Prenom": "Paterne", "Quand": "15/04"}, {"Prenom": "Benoît-Joseph", "Quand": "16/04"}, {"Prenom": "Anicet", "Quand": "17/04"}, {"Prenom": "Parfait", "Quand": "18/04"}, {"Prenom": "Emma", "Quand": "19/04"}, {"Prenom": "Odette", "Quand": "20/04"}, {"Prenom": "Anselme", "Quand": "21/04"}, {"Prenom": "Alexandre", "Quand": "22/04"}, {"Prenom": "Georges", "Quand": "23/04"}, {"Prenom": "Fidèle", "Quand": "24/04"}, {"Prenom": "Marc", "Quand": "25/04"}, {"Prenom": "Alida", "Quand": "26/04"}, {"Prenom": "Zita", "Quand": "27/04"}, {"Prenom": "Valérie", "Quand": "28/04"}, {"Prenom": "Catherine de Sienne", "Quand": "29/04"}, {"Prenom": "Robert", "Quand": "30/04"}, {"Prenom": "Fête du travail", "Quand": "01/05"}, {"Prenom": "Boris", "Quand": "02/05"}, {"Prenom": "Philippe / Jacques", "Quand": "03/05"}, {"Prenom": "Sylvain", "Quand": "04/05"}, {"Prenom": "Judith", "Quand": "05/05"}, {"Prenom": "Prudence", "Quand": "06/05"}, {"Prenom": "Gisèle", "Quand": "07/05"}, {"Prenom": "Jeanne d'Arc", "Quand": "08/05"}, {"Prenom": "Pacôme", "Quand": "09/05"}, {"Prenom": "Solange", "Quand": "10/05"}, {"Prenom": "Estelle", "Quand": "11/05"}, {"Prenom": "Achille", "Quand": "12/05"}, {"Prenom": "Rolande", "Quand": "13/05"}, {"Prenom": "Matthias", "Quand": "14/05"}, {"Prenom": "Denise", "Quand": "15/05"}, {"Prenom": "Honoré", "Quand": "16/05"}, {"Prenom": "Pascal", "Quand": "17/05"}, {"Prenom": "Eric", "Quand": "18/05"}, {"Prenom": "Yves", "Quand": "19/05"}, {"Prenom": "Bernardin", "Quand": "20/05"}, {"Prenom": "Constantin", "Quand": "21/05"}, {"Prenom": "Emile", "Quand": "22/05"}, {"Prenom": "Didier", "Quand": "23/05"}, {"Prenom": "Donatien", "Quand": "24/05"}, {"Prenom": "Sophie", "Quand": "25/05"}, {"Prenom": "Bérenger", "Quand": "26/05"}, {"Prenom": "Augustin", "Quand": "27/05"}, {"Prenom": "Germain", "Quand": "28/05"}, {"Prenom": "Aymar", "Quand": "29/05"}, {"Prenom": "Ferdinand", "Quand": "30/05"}, {"Prenom": "Visitation de la Sainte Vierge", "Quand": "31/05"}, {"Prenom": "Justin", "Quand": "01/06"}, {"Prenom": "Blandine", "Quand": "02/06"}, {"Prenom": "Kévin", "Quand": "03/06"}, {"Prenom": "Clotilde", "Quand": "04/06"}, {"Prenom": "Igor", "Quand": "05/06"}, {"Prenom": "Norbert", "Quand": "06/06"}, {"Prenom": "Gilbert", "Quand": "07/06"}, {"Prenom": "Médard", "Quand": "08/06"}, {"Prenom": "Diane", "Quand": "09/06"}, {"Prenom": "Landry", "Quand": "10/06"}, {"Prenom": "Barnabé", "Quand": "11/06"}, {"Prenom": "Guy", "Quand": "12/06"}, {"Prenom": "Antoine de Padoue", "Quand": "13/06"}, {"Prenom": "Elisée", "Quand": "14/06"}, {"Prenom": "Germaine", "Quand": "15/06"}, {"Prenom": "Jean-François / Régis", "Quand": "16/06"}, {"Prenom": "Hervé", "Quand": "17/06"}, {"Prenom": "Léonce", "Quand": "18/06"}, {"Prenom": "Romuald", "Quand": "19/06"}, {"Prenom": "Silvère", "Quand": "20/06"}, {"Prenom": "Héraclide / Rodolphe", "Quand": "21/06"}, {"Prenom": "Alban", "Quand": "22/06"}, {"Prenom": "Audrey", "Quand": "23/06"}, {"Prenom": "Jean-Baptiste", "Quand": "24/06"}, {"Prenom": "Prosper", "Quand": "25/06"}, {"Prenom": "Anthelme", "Quand": "26/06"}, {"Prenom": "Fernand", "Quand": "27/06"}, {"Prenom": "Irénée", "Quand": "28/06"}, {"Prenom": "Pierre / Paul", "Quand": "29/06"}, {"Prenom": "Martial", "Quand": "30/06"}, {"Prenom": "Thierry", "Quand": "01/07"}, {"Prenom": "Martinien", "Quand": "02/07"}, {"Prenom": "Thomas", "Quand": "03/07"}, {"Prenom": "Florent", "Quand": "04/07"}, {"Prenom": "Antoine", "Quand": "05/07"}, {"Prenom": "Mariette", "Quand": "06/07"}, {"Prenom": "Raoul", "Quand": "07/07"}, {"Prenom": "Thibault", "Quand": "08/07"}, {"Prenom": "Amandine", "Quand": "09/07"}, {"Prenom": "Ulrich", "Quand": "10/07"}, {"Prenom": "Benoît", "Quand": "11/07"}, {"Prenom": "Olivier", "Quand": "12/07"}, {"Prenom": "Henri / Joël", "Quand": "13/07"}, {"Prenom": "Fête nationale", "Quand": "14/07"}, {"Prenom": "Donald", "Quand": "15/07"}, {"Prenom": "Notre Dame du Mont Carmel", "Quand": "16/07"}, {"Prenom": "Charlotte", "Quand": "17/07"}, {"Prenom": "Frédéric", "Quand": "18/07"}, {"Prenom": "Arsène", "Quand": "19/07"}, {"Prenom": "Marina", "Quand": "20/07"}, {"Prenom": "Victor", "Quand": "21/07"}, {"Prenom": "Marie-Madeleine", "Quand": "22/07"}, {"Prenom": "Brigitte", "Quand": "23/07"}, {"Prenom": "Christine", "Quand": "24/07"}, {"Prenom": "Jacques", "Quand": "25/07"}, {"Prenom": "Anne / Joachin", "Quand": "26/07"}, {"Prenom": "Nathalie", "Quand": "27/07"}, {"Prenom": "Samson", "Quand": "28/07"}, {"Prenom": "Marthe", "Quand": "29/07"}, {"Prenom": "Juliette", "Quand": "30/07"}, {"Prenom": "Ignace de Loyola", "Quand": "31/07"}, {"Prenom": "Alphonse", "Quand": "01/08"}, {"Prenom": "Julien / Eymard", "Quand": "02/08"}, {"Prenom": "Lydie", "Quand": "03/08"}, {"Prenom": "Jean-Marie Vianney", "Quand": "04/08"}, {"Prenom": "Abel", "Quand": "05/08"}, {"Prenom": "Transfiguration", "Quand": "06/08"}, {"Prenom": "Gaétan", "Quand": "07/08"}, {"Prenom": "Dominique", "Quand": "08/08"}, {"Prenom": "Amour", "Quand": "09/08"}, {"Prenom": "Laurent", "Quand": "10/08"}, {"Prenom": "Claire", "Quand": "11/08"}, {"Prenom": "Clarisse", "Quand": "12/08"}, {"Prenom": "Hippolyte", "Quand": "13/08"}, {"Prenom": "Evrard", "Quand": "14/08"}, {"Prenom": "Assomption", "Quand": "15/08"}, {"Prenom": "Armel", "Quand": "16/08"}, {"Prenom": "Hyacinthe", "Quand": "17/08"}, {"Prenom": "Hélène", "Quand": "18/08"}, {"Prenom": "Jean-Eudes", "Quand": "19/08"}, {"Prenom": "Bernard", "Quand": "20/08"}, {"Prenom": "Christophe", "Quand": "21/08"}, {"Prenom": "Fabrice", "Quand": "22/08"}, {"Prenom": "Rose de Lima", "Quand": "23/08"}, {"Prenom": "Barthélémy", "Quand": "24/08"}, {"Prenom": "Louis", "Quand": "25/08"}, {"Prenom": "Natacha", "Quand": "26/08"}, {"Prenom": "Monique", "Quand": "27/08"}, {"Prenom": "Augustin", "Quand": "28/08"}, {"Prenom": "Sabine", "Quand": "29/08"}, {"Prenom": "Fiacre", "Quand": "30/08"}, {"Prenom": "Aristide", "Quand": "31/08"}, {"Prenom": "Gilles", "Quand": "01/09"}, {"Prenom": "Ingrid", "Quand": "02/09"}, {"Prenom": "Grégoire", "Quand": "03/09"}, {"Prenom": "Rosalie", "Quand": "04/09"}, {"Prenom": "Raïssa", "Quand": "05/09"}, {"Prenom": "Bertrand", "Quand": "06/09"}, {"Prenom": "Reine", "Quand": "07/09"}, {"Prenom": "Nativité", "Quand": "08/09"}, {"Prenom": "Alain", "Quand": "09/09"}, {"Prenom": "Inès", "Quand": "10/09"}, {"Prenom": "Adelphe", "Quand": "11/09"}, {"Prenom": "Apollinaire", "Quand": "12/09"}, {"Prenom": "Aimé", "Quand": "13/09"}, {"Prenom": "Croix Glorieuse", "Quand": "14/09"}, {"Prenom": "Roland", "Quand": "15/09"}, {"Prenom": "Edith", "Quand": "16/09"}, {"Prenom": "Renaud", "Quand": "17/09"}, {"Prenom": "Nadège", "Quand": "18/09"}, {"Prenom": "Emilie", "Quand": "19/09"}, {"Prenom": "Davy", "Quand": "20/09"}, {"Prenom": "Matthieu", "Quand": "21/09"}, {"Prenom": "Maurice", "Quand": "22/09"}, {"Prenom": "Constant", "Quand": "23/09"}, {"Prenom": "Thècle", "Quand": "24/09"}, {"Prenom": "Hermann", "Quand": "25/09"}, {"Prenom": "Côme / Damien", "Quand": "26/09"}, {"Prenom": "Vincent de Paul", "Quand": "27/09"}, {"Prenom": "Venceslas", "Quand": "28/09"}, {"Prenom": "Michel / Gabriel / Raphaël", "Quand": "29/09"}, {"Prenom": "Jérôme", "Quand": "30/09"}, {"Prenom": "Thérèse de l' Enfant Jésus", "Quand": "01/10"}, {"Prenom": "Léger", "Quand": "02/10"}, {"Prenom": "Gérard", "Quand": "03/10"}, {"Prenom": "François d'Assise", "Quand": "04/10"}, {"Prenom": "Fleur", "Quand": "05/10"}, {"Prenom": "Bruno", "Quand": "06/10"}, {"Prenom": "Serge", "Quand": "07/10"}, {"Prenom": "Pélagie", "Quand": "08/10"}, {"Prenom": "Denis", "Quand": "09/10"}, {"Prenom": "Ghislain", "Quand": "10/10"}, {"Prenom": "Firmin", "Quand": "11/10"}, {"Prenom": "Wilfried", "Quand": "12/10"}, {"Prenom": "Géraud", "Quand": "13/10"}, {"Prenom": "Juste", "Quand": "14/10"}, {"Prenom": "Thérèse d'Avila", "Quand": "15/10"}, {"Prenom": "Edwige", "Quand": "16/10"}, {"Prenom": "Baudoin", "Quand": "17/10"}, {"Prenom": "Luc", "Quand": "18/10"}, {"Prenom": "René", "Quand": "19/10"}, {"Prenom": "Adeline", "Quand": "20/10"}, {"Prenom": "Céline", "Quand": "21/10"}, {"Prenom": "Elodie", "Quand": "22/10"}, {"Prenom": "Jean de Capistran", "Quand": "23/10"}, {"Prenom": "Florentin", "Quand": "24/10"}, {"Prenom": "Crépin", "Quand": "25/10"}, {"Prenom": "Dimitri", "Quand": "26/10"}, {"Prenom": "Emeline", "Quand": "27/10"}, {"Prenom": "Jude", "Quand": "28/10"}, {"Prenom": "Narcisse", "Quand": "29/10"}, {"Prenom": "Bienvenu", "Quand": "30/10"}, {"Prenom": "Quentin", "Quand": "31/10"}, {"Prenom": "Toussaint", "Quand": "01/11"}, {"Prenom": "Défunts", "Quand": "02/11"}, {"Prenom": "Hubert", "Quand": "03/11"}, {"Prenom": "Charles", "Quand": "04/11"}, {"Prenom": "Sylvie", "Quand": "05/11"}, {"Prenom": "Bertille", "Quand": "06/11"}, {"Prenom": "Carine", "Quand": "07/11"}, {"Prenom": "Geoffroy", "Quand": "08/11"}, {"Prenom": "Théodore", "Quand": "09/11"}, {"Prenom": "Léon", "Quand": "10/11"}, {"Prenom": "Armistice 14-18", "Quand": "11/11"}, {"Prenom": "Christian", "Quand": "12/11"}, {"Prenom": "Brice", "Quand": "13/11"}, {"Prenom": "Sidoine", "Quand": "14/11"}, {"Prenom": "Albert", "Quand": "15/11"}, {"Prenom": "Marguerite", "Quand": "16/11"}, {"Prenom": "Elisabeth", "Quand": "17/11"}, {"Prenom": "Aude", "Quand": "18/11"}, {"Prenom": "Tanguy", "Quand": "19/11"}, {"Prenom": "Edmond", "Quand": "20/11"}, {"Prenom": "Christ Roi / Prés de Marie", "Quand": "21/11"}, {"Prenom": "Cécile", "Quand": "22/11"}, {"Prenom": "Clément", "Quand": "23/11"}, {"Prenom": "Flora", "Quand": "24/11"}, {"Prenom": "Catherine", "Quand": "25/11"}, {"Prenom": "Delphine", "Quand": "26/11"}, {"Prenom": "Sévrin", "Quand": "27/11"}, {"Prenom": "Jacques de la Marche", "Quand": "28/11"}, {"Prenom": "Saturnin", "Quand": "29/11"}, {"Prenom": "André", "Quand": "30/11"}, {"Prenom": "Florence", "Quand": "01/12"}, {"Prenom": "Viviane", "Quand": "02/12"}, {"Prenom": "François-Xavier", "Quand": "03/12"}, {"Prenom": "Barbara", "Quand": "04/12"}, {"Prenom": "Gérald", "Quand": "05/12"}, {"Prenom": "Nicolas", "Quand": "06/12"}, {"Prenom": "Ambroise", "Quand": "07/12"}, {"Prenom": "Immaculée Conception", "Quand": "08/12"}, {"Prenom": "Pierre Fourier", "Quand": "09/12"}, {"Prenom": "Romaric", "Quand": "10/12"}, {"Prenom": "Daniel", "Quand": "11/12"}, {"Prenom": "Jeanne-Françoise de Chantal", "Quand": "12/12"}, {"Prenom": "Lucie", "Quand": "13/12"}, {"Prenom": "Odile", "Quand": "14/12"}, {"Prenom": "Ninon", "Quand": "15/12"}, {"Prenom": "Alice", "Quand": "16/12"}, {"Prenom": "Gaël", "Quand": "17/12"}, {"Prenom": "Gatien", "Quand": "18/12"}, {"Prenom": "Urbain", "Quand": "19/12"}, {"Prenom": "Théophile", "Quand": "20/12"}, {"Prenom": "Pierre Canisius", "Quand": "21/12"}, {"Prenom": "Françoise-Xavière", "Quand": "22/12"}, {"Prenom": "Armand", "Quand": "23/12"}, {"Prenom": "Adèle", "Quand": "24/12"}, {"Prenom": "Emmanuel", "Quand": "25/12"}, {"Prenom": "Etienne", "Quand": "26/12"}, {"Prenom": "Jean", "Quand": "27/12"}, {"Prenom": "Innocents", "Quand": "28/12"}, {"Prenom": "David", "Quand": "29/12"}, {"Prenom": "Roger", "Quand": "30/12"}, {"Prenom": "Sylvestre", "Quand": "31/12"}, {"Prenom": "Auguste", "Quand": "29/02"}]
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre