Calendrier défilant

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

Calendrier défilant

Message par Micoute »

Voici un calendrier que j'ai codé et je voudrais en faire profiter les autres, vous trouverez les source à l'adresse suivante :

http://dl.free.fr/fOFxxQhsa

si un modérateur peut supprimer les posts suivants, je le remercie, sinon pouvez-vous m'expliquer comment faire
Dernière modification par Micoute le dim. 02/sept./2012 12:42, modifié 5 fois.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

Voici une autre partie

Fêtes mobiles et fixes.pb

Code : Tout sélectionner

Enumeration
	#NouvelAn
	#Mardi_Gras
	#Cendres
	#feteDesGrandMeres
	#Passion
	#Rameaux
	#Jeudi_Saint
	#Vendredi_Saint
	#Paques
	#PaquesLundi
	#FeteDuTravail
	#Victoire1945
	#Ascension
	#Pentecote
	#PentecoteLundi
	#FeteDesMeres
	#Trinite
	#FetesDesPeres
	#FeteNationale
	#Assomption
	#FeteDesGrandPeres
	#Toussaint
	#Armistice
	#Noel
	#Saint_Sylvestre
	#Heure_d_ete
	#Heure_d_hiver
EndEnumeration

Declare.l Paques(annee.l = -1) 

;- Fêtes religieuses
Procedure.l Paques_(annee.l) ; interne 
	
	;/ http://www.chez.com/cosmos2000/Vendredi13/DelambreAlgorithme.html 
	
	Protected a, b, c, d, e 
	
	a = ( Mod(annee , 19) ) ; n
	b = ( annee / 100 ) ; c
	c = ( Mod(annee , 100) ) 
	d = Mod( ( 19 * a + b - ( b / 4 ) - ( ( b - ( ( b + 8 ) / 25 ) + 1 ) / 3 ) + 15 ) , 30 ) 
	e = Mod( ( 32 + 2 * Mod( b , 4 ) + 2 * ( c / 4 ) - d - Mod( c , 4 ) ) , 7 ) 
	
	ProcedureReturn ( 22 + d + e - 7 * ( ( a + 11 * d + 22 * e ) / 451 ) ) 
	
EndProcedure 

Procedure Mardi_Gras(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -47)
EndProcedure

Procedure Cendres(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -46)
EndProcedure

Procedure Passion(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -14)
EndProcedure

Procedure Rameaux(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -7)
EndProcedure

Procedure Jeudi_Saint(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -3)
EndProcedure

Procedure Vendredi_Saint(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, -2)
EndProcedure

Procedure.l Paques(annee.l = -1) 
	
	Protected jour, mois = 3 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	jour = Paques_(annee) 
	
	If jour 
		If jour > 31 
			jour - 31 : mois + 1 
		EndIf 
		ProcedureReturn Date (annee, mois, jour, 0, 0, 0) 
	EndIf 
	
EndProcedure 

Procedure.l PaquesLundi(annee.l = -1) 
	
	ProcedureReturn AddDate (Paques(annee), #PB_Date_Day , 1) 
	
EndProcedure 

Procedure.l Ascension(annee.l = -1) 
	
	ProcedureReturn AddDate (Paques(annee), #PB_Date_Day , 39) 
	
EndProcedure

Procedure.l Pentecote(annee.l = -1) 
	ProcedureReturn   AddDate (Paques(annee), #PB_Date_Week , 7) ;#PB_Date_Day,49)
EndProcedure 

Procedure.l PentecoteLundi(annee.l = -1) 
	
	ProcedureReturn AddDate (Paques(annee), #PB_Date_Day , 50) 
	
EndProcedure 

Procedure.l Trinite(annee.l = -1)
	ProcedureReturn AddDate(Paques(annee), #PB_Date_Day, 56)
EndProcedure
;-
;- Fêtes immobiles
Procedure.l NouvelAn(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 1, 1, 0, 0, 0) 
	
EndProcedure 

Procedure.l FeteDuTravail(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 5, 1, 0, 0, 0) 
	
EndProcedure 

Procedure.l Victoire1945(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 5, 8, 0, 0, 0) 
	
EndProcedure

Procedure.l FeteNationale(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 7, 14, 0, 0, 0) 
	
EndProcedure 

Procedure.l Assomption(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 8, 15, 0, 0, 0) 
	
EndProcedure 

Procedure.l Toussaint(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 11, 1, 0, 0, 0) 
	
EndProcedure 

Procedure.l Armistice(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 11, 11, 0, 0, 0) 
	
EndProcedure 

Procedure.l Noel(annee.l = -1) 
	
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 12, 25, 0, 0, 0) 
	
EndProcedure 

Procedure.l Saint_Sylvestre(annee.l = -1)
	If annee = -1 
		annee = Year( Date ()) 
	EndIf 
	
	ProcedureReturn Date (annee, 12, 31, 0, 0, 0) 
	
EndProcedure 
;-
;-Fêtes familliales
Procedure Fete_des_grand_meres(annee = -1)
	If DayOfWeek(Date(annee,3,1,0,0,0)) = 0 ; dimanche
		Fete_des_grand_meres = DayOfYear(Date(annee,3,1,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) = 1 ; lundi
		Fete_des_grand_meres = DayOfYear(Date(annee,3,7,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) = 2
		Fete_des_grand_meres = DayOfYear(Date(annee,3,6,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) = 3
		Fete_des_grand_meres = DayOfYear(Date(annee,3,5,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) = 4
		Fete_des_grand_meres = DayOfYear(Date(annee,3,4,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) =  5
		Fete_des_grand_meres = DayOfYear(Date(annee,3,3,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,1,0,0,0)) =  6
		Fete_des_grand_meres = DayOfYear(Date(annee,3,2,0,0,0))
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Fete_des_grand_meres)
EndProcedure

; Ajouté le 22 mai 2011
Procedure.l FeteDesMeres(annee.l = -1) 
	If DayOfWeek(Date(annee,5,31,0,0,0)) = 0
		Fete_des_meres = DayOfYear(Date(annee,5,31,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) = 1
		Fete_des_meres = DayOfYear(Date(annee,5,30,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) = 2
		Fete_des_meres = DayOfYear(Date(annee,5,29,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) = 3
		Fete_des_meres = DayOfYear(Date(annee,5,28,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) = 4
		Fete_des_meres = DayOfYear(Date(annee,5,27,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) =  5
		Fete_des_meres = DayOfYear(Date(annee,5,26,0,0,0))
	ElseIf DayOfWeek(Date(annee,5,31,0,0,0)) =  6
		Fete_des_meres = DayOfYear(Date(annee,5,25,0,0,0))
	EndIf
	
	If AddDate (Paques(annee), #PB_Date_Week , 7) = AddDate (NouvelAn(annee), #PB_Date_Day , Fete_des_meres-1)
		Fete_des_meres + 7
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Fete_des_meres) ; -1 parce que janvier commence le 1
	
EndProcedure 

Procedure Fete_des_peres(annee = -1)
	If DayOfWeek(Date(annee,6,21,0,0,0)) = 0
		Fete_des_peres = DayOfYear(Date(annee,6,21,0,0,0))
	ElseIf DayOfWeek(Date(annee,6,21,0,0,0)) = 1
		Fete_des_peres = DayOfYear(Date(annee,6,20,0,0,0))
	ElseIf DayOfWeek(Date(annee,6,21,0,0,0)) = 2
		Fete_des_peres = DayOfYear(Date(annee,6,19,0,0,0))
	ElseIf DayOfWeek(Date(annee,6,21,0,0,0)) = 3
		Fete_des_peres = DayOfYear(Date(annee,6,18,0,0,0))
	ElseIf DayOfWeek(Date(annee,6,21,0,0,0)) = 4
		Fete_des_peres = DayOfYear(Date(Annee,6,17,0,0,0))
	ElseIf DayOfWeek(Date(Annee,6,21,0,0,0)) =  5
		Fete_des_peres = DayOfYear(Date(Annee,6,16,0,0,0))
	ElseIf DayOfWeek(Date(Annee,6,21,0,0,0)) =  6
		Fete_des_peres = DayOfYear(Date(Annee,6,15,0,0,0))
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Fete_des_peres) ; -1 parce que janvier commence le 1
EndProcedure

Procedure Fete_des_grand_peres(annee= -1)
	If DayOfWeek(Date(Annee,10,1,0,0,0)) = 0 ; dimanche
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,1,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) = 1 ; lundi
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,7,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) = 2
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,6,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) = 3
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,5,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) = 4
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,4,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) =  5
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,3,0,0,0))
	ElseIf DayOfWeek(Date(Annee,10,1,0,0,0)) =  6
		Fete_des_grand_peres = DayOfYear(Date(Annee,10,2,0,0,0))
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Fete_des_grand_peres)
EndProcedure
;-
;- changements d'heure
Procedure Heure_d_ete(annee = -1)
	If DayOfWeek(Date(annee,3,31,0,0,0)) = 0 ; dimanche
		Heure_d_ete = DayOfYear(Date(annee,3,31,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) = 1 ; lundi
		Heure_d_ete = DayOfYear(Date(annee,3,30,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) = 2
		Heure_d_ete = DayOfYear(Date(annee,3,29,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) = 3
		Heure_d_ete = DayOfYear(Date(annee,3,28,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) = 4
		Heure_d_ete = DayOfYear(Date(annee,3,27,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) =  5
		Heure_d_ete = DayOfYear(Date(annee,3,26,0,0,0))
	ElseIf DayOfWeek(Date(annee,3,31,0,0,0)) =  6
		Heure_d_ete = DayOfYear(Date(annee,3,25,0,0,0))
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Heure_d_ete)
EndProcedure

Procedure Heure_d_hiver(annee = -1)
	If DayOfWeek(Date(annee,10,31,0,0,0)) = 0 ; dimanche
		Heure_d_hiver = DayOfYear(Date(annee,10,31,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) = 1 ; lundi
		Heure_d_hiver = DayOfYear(Date(annee,10,30,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) = 2
		Heure_d_hiver = DayOfYear(Date(annee,10,29,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) = 3
		Heure_d_hiver = DayOfYear(Date(annee,10,28,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) = 4
		Heure_d_hiver = DayOfYear(Date(annee,10,27,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) =  5
		Heure_d_hiver = DayOfYear(Date(annee,10,26,0,0,0))
	ElseIf DayOfWeek(Date(annee,10,31,0,0,0)) =  6
		Heure_d_hiver = DayOfYear(Date(annee,10,25,0,0,0))
	EndIf
	
	ProcedureReturn AddDate (NouvelAn(annee)-1, #PB_Date_Day , Heure_d_hiver)
EndProcedure
Dernière modification par Micoute le sam. 01/sept./2012 16:26, modifié 1 fois.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

Fonctions_Date.pbi

Code : Tout sélectionner

;- déclarations diverses

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."

DeclareDLL.b SiBissextile(annee=-1)

ProcedureDLL.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

ProcedureDLL.b Jours_dans_le_mois(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

;; Exemple pour l'année 2008 (une année bissextile)
; Define mois, annee$=""
; For mois=1 To 12
;   annee$ + Str(Jours_dans_le_mois(2008, mois))+" "
; Next mois
; Debug annee$ ; 31 29 31 30 31 30 31 31 30 31 30 31

ProcedureDLL.s DDA(annee=-1)
	If annee < 0
		DateCourante = ChaineDate(Masque,Date(Year(Date()),1,1,0,0,0))
	Else
		DateCourante = ChaineDate(Masque,Date(annee,1,1,0,0,0))
	EndIf
	ProcedureReturn DateCourante
EndProcedure

; Debug DDA()

ProcedureDLL.s FDA(annee=-1)
	If annee < 0
		DateCourante = ChaineDate(Masque,Date(Year(Date()),12,31,0,0,0))
	Else
		DateCourante = ChaineDate(Masque,Date(annee,12,31,0,0,0))
	EndIf
	ProcedureReturn DateCourante
EndProcedure

;Debug fda()

ProcedureDLL.s DDM(annee=-1,Mois=-1)
	If annee < 0 Or mois < 0
		DateCourante = ChaineDate(Masque,Date(Year(Date()),Month(Date()),1,0,0,0))
	Else
		DateCourante = ChaineDate(Masque,Date(annee,Mois,1,0,0,0))
	EndIf
	ProcedureReturn DateCourante
EndProcedure

;Debug ddm()

ProcedureDLL.s FDM(annee=-1, Mois=-1)
	If annee < 0 Or mois < 0
		ProcedureReturn ChaineDate(Masque,Date(Year(Date()),Month(Date()),Jours_dans_le_mois(),0,0,0))
	Else
		ProcedureReturn ChaineDate(Masque,Date(annee,Mois,Jours_dans_le_mois(),0,0,0))
	EndIf
EndProcedure

;Debug fdm()

ProcedureDLL.w  JDA(annee=-1)
	If annee < 0
		ProcedureReturn DayOfYear(Date())
	Else
		ProcedureReturn DayOfYear(annee)
	EndIf
EndProcedure

;Debug jda()

ProcedureDLL.w JourRestantAnnee()

	Protected reste = 365 + SiBissextile(annee)
	
	ProcedureReturn reste-Int(DayOfYear(Date()))
EndProcedure

;Debug JourRestantAnnee()

ProcedureDLL.b DonneSemaine(PAnnee.w,PMois.b,PJour.b)
  PAnnee=Int(Year(Date()))
  PMois=Int(Month(Date()))
  PJour=Int(Day(Date())) 
  
  Protected Semaine4J.b = DayOfWeek(Date(PAnnee.w,1,4,0,0,0)) 
  If Semaine4J.b = 0 : Semaine4J.b = 7 : EndIf 
  Protected MoSemaine1.b = 4-Semaine4J.b 
  Protected SemaineGD.b = DayOfWeek(Date(PAnnee.w,PMois.b,PJour.b,0,0,0)) 
  ; Lundi = 1 Dimanche = 7. 
  If SemaineGD.b = 0 : SemaineGD.b = 7 : EndIf 
  Protected MoGD.w = DayOfYear(Date(PAnnee.w,PMois.b,PJour.b,0,0,0))-SemaineGD.b 
  Semaine.b = Int((MoGD.w-MoSemaine1.b)/7)+1 
  If PMois.b = 12 
    Protected NumWeek1Q.w = DayOfYear(Date(PAnnee.w,PMois.b,PJour.b,0,0,0)) 
    Protected Semaine4JNY.b = DayOfWeek(Date(PAnnee.w+1,1,4,0,0,0)) 
    ; Lundi = 1 Dimanche = 7. 
    If Semaine4JNY.b = 0 : Semaine4JNY.b = 7 : EndIf 
    Protected LastYDay.w = DayOfYear(Date(PAnnee.w,12,31,0,0,0)) 
    If LastYDay.w - NumWeek1Q.w < Semaine4JNY.b -4 
       Semaine.b = 1 
    EndIf 
  EndIf 
  
  If PMois.b = 1 And PJour.b < 4 
    If Semaine4J.b < SemaineGD.b 
      Semaine.b = DonneSemaine(PAnnee.w-1,12,31) 
    EndIf 
  EndIf 
  ProcedureReturn Semaine
EndProcedure 

;Debug DonneSemaine(Year(Date()),Month(Date()),Day(Date()))

ProcedureDLL.b  NumSemaine()
	Protected date.b, NumSem.i
  NumSem=DonneSemaine(Year(date),Month(date),Day(date))
  ProcedureReturn NumSem
EndProcedure

;Debug NumSemaine()

ProcedureDLL NumeroSemaine(Date.l) ; Retourne le numéro de semaine de l'année
	Protected Semaine.i = 0
	Protected Compteur=Date(Year(Date),1,1,0,0,1) ;/ jour du nouvel an
  
  ;/ Aller au premier lundi
  Repeat
    If DayOfWeek(Compteur)=1 : Break : EndIf
    Compteur=AddDate(Compteur,#PB_Date_Day,1)
  ForEver
  
  ;/ Ajouter 1 semaine / Teste si la date est atteinte
  Repeat
    If Compteur>Date : Break : EndIf
    Compteur=AddDate(Compteur,#PB_Date_Week,1)
    Semaine+1
  ForEver
  
  ProcedureReturn Semaine
EndProcedure

;Debug NumeroSemaine(Date())

ProcedureDLL.b   NbSemRestant()      
 	ProcedureReturn 52 - NumSemaine()
EndProcedure

;Debug NbSemRestant()

ProcedureDLL.s JDS()
	NumJS = DayOfWeek(Date())+1
JourCourant = StringField(NomJours,NumJS,"|")
  ProcedureReturn JourCourant
EndProcedure

;Debug JDS()

ProcedureDLL.b Jour()
 ProcedureReturn Day(Date())
EndProcedure

; Debug Jour()

ProcedureDLL.s Mois()
	MoisCourant = StringField(NomMois,Month(Date()),"|")
ProcedureReturn MoisCourant
EndProcedure

;Debug Mois()

ProcedureDLL.w JourRestantMois()
	NbJMR = Jours_dans_le_mois(annee,Month(Date)) - Jour()
	ProcedureReturn NbJMR
EndProcedure

; Debug NbJMR

ProcedureDLL.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)
; Le calendrier iranien est basée sur 8 jours bissextiles tous les 33 ans (365,242424 jours)

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
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

Phases de la lune.pb d'après un programme de Huit bits

Code : Tout sélectionner

Structure Structure_PhaseLune
	Phase.b
	Date.l
	An.l
	Mois.b
	Jour.b
	Heure.b
	Minute.b
EndStructure

Global NewList PhaseLune.Structure_PhaseLune()

Procedure Calculer_PhaseLune(Annee_, Mois_)
	Static Calculer_PhaseLune_Annee.l, Calculer_PhaseLune_Mois.b
	Protected.l Date, i, ii, Heure, Minute, Mois, An, Jour, JJ
	Protected.d K, T, T2, T3, J, M, MP, F
	
	If  Annee_ <> Calculer_PhaseLune_Annee Or Mois_ <> Calculer_PhaseLune_Mois
		Calculer_PhaseLune_Annee = Annee_
		Calculer_PhaseLune_Mois = Mois_
		
		ClearList(PhaseLune())
		
		Repeat
			GetSystemTime_(DateUTC.SYSTEMTIME)
			GetLocalTime_(DateLocale.SYSTEMTIME)
		Until DateUTC\wSecond = DateLocale\wSecond ; Garantit que la lecture de la date s'est effectuée sur la même seconde
		DateUTC_Seconde.q = Date(DateUTC\wYear, DateUTC\wMonth, DateUTC\wDay, DateUTC\wHour, DateUTC\wMinute, DateUTC\wSecond)
		DateLocale_Seconde.q = Date(DateLocale\wYear, DateLocale\wMonth, DateLocale\wDay, DateLocale\wHour, DateLocale\wMinute, DateLocale\wSecond)
		
		DecalageHoraire_Seconde.q = DateLocale_Seconde - DateUTC_Seconde
		
		Date = Date(Annee_, Mois_, 1, 0, 0, 0)
		Date = AddDate(Date, #PB_Date_Month, -1)
		K.d = Year(Date)
		Select Month(Date)
			Case 1
				K + 0.041
			Case 2
				K + 0.126
			Case 3
				K + 0.203
			Case 4
				K + 0.288
			Case 5
				K + 0.370
			Case 6
				K + 0.455
			Case 7
				K + 0.537
			Case 8
				K + 0.622
			Case 9
				K + 0.707
			Case 10
				K + 0.789
			Case 11
				K + 0.874
			Case 12
				K + 0.956
		EndSelect
		K = (K - 1900) * 12.3685
		K = Int(K) - 0.25
		If K < 0
			K - 1
		EndIf
		
		For ii = 0 To 11
			
			K + 0.25
			T.d = K / 1236.85
			T2.d = T * T
			T3.d = T * T2
			J.d = 2415020.75933 + 29.5305888531 * K + 0.0001337 * T2 - 0.000000150 * T3 + 0.00033 * Sin((166.56 + 132.87 * T - 0.009 * T2) * #PI / 180)
			M.d = (359.2242 + 29.10535608 * K - 0.0000333 * T2 - 0.00000347 * T3) * #PI / 180
			M = M - Int(M / (2 * #PI)) * (2 * #PI)
			MP.d = (306.0253 + 385.81691806 * K + 0.0107306 * T2 + 0.00001236 * T3) * #PI / 180
			MP = MP - Int(MP / (2 * #PI)) * (2 * #PI)
			F.d = (21.2964 + 390.67050646 * K - 0.0016528 * T2 - 0.00000239 * T3) * #PI / 180
			F = F - Int(F / (2 * #PI)) * (2 * #PI)
			
			i = ii % 4
			If i = 0 Or i = 2
				J + (0.1734 - 0.000393 * T) * Sin(M)
				J + 0.0021 * Sin(2 * M) - 0.4068 * Sin(MP)
				J + 0.0161 * Sin(2 * MP) - 0.0004 * Sin(3 * MP)
				J + 0.0104 * Sin(2 * F) - 0.0051 * Sin(M + MP)
				J - 0.0074 * Sin(M - MP) + 0.0004 * Sin(2 * F + M)
				J - 0.0004 * Sin(2 * F - M) - 0.0006 * Sin(2 * F + MP)
				J + 0.001 * Sin(2 * F - MP) + 0.0005 * Sin(M + 2 * MP)
			Else
				J + (0.1721 - 0.0004 * T) * Sin(M)
				J + 0.0021 * Sin(2 * M) - 0.6280 * Sin(MP)
				J + 0.0089 * Sin(2 * MP) - 0.0004 * Sin(3 * MP)
				J + 0.0079 * Sin(2 * F) - 0.0119 * Sin(M + MP)
				J - 0.0047 * Sin(M - MP) + 0.0003 * Sin(2 * F + M)
				J - 0.0004 * Sin(2 * F - M) - 0.0006 * Sin(2 * F + MP)
				J + 0.0021 * Sin(2 * F - MP) + 0.0003 * Sin(M + 2 * MP)
				J + 0.0004 * Sin(M - 2 * MP) - 0.0003 * Sin(2 * M + MP)
				If i = 1
					J + 0.0028 - 0.0004 * Cos(M)
					J + 0.0003 * Cos(MP)
				Else
					J - 0.0028 + 0.0004 * Cos(M)
					J - 0.0003 * Cos(MP)
				EndIf
			EndIf
			
			J + 0.5
			JJ = Int(j-1)
			If JJ >= 2299160.5
				Alpha.d = Int((JJ - 1867216.25) / 36524.25)
				JJ = JJ + 1 + Alpha - Int(Alpha / 4)
			EndIf
			JJ + 1524
			Calcul_An = Int((JJ - 122.1) / 365.25)
			Calcul_Jour = Int(Calcul_An * 365.25)
			Calcul_Mois = Int((JJ - Calcul_Jour) / 30.6001)
			Jour = Int(JJ - Calcul_Jour - Int(Calcul_Mois * 30.6001))
			If Calcul_Mois < 13.5
				Mois = Int(Calcul_Mois - 1)
			Else
				Mois = Int(Calcul_Mois - 13)
			EndIf
			If Mois >= 3
				An = Int(Calcul_An - 4716)
			Else
				An = Int(Calcul_An - 4715)
			EndIf
			J - Int(j-1)
			Heure = Int(J * 24)
			Minute = Int((J - Heure / 24) * 1440)
			
			AddElement(PhaseLune())
			PhaseLune()\Phase = i
			PhaseLune()\Date = Date(An, Mois, Jour, 0, 0, 0) + (Heure * 3600 + Minute * 60) + DecalageHoraire_Seconde
			PhaseLune()\An = Year(PhaseLune()\Date)
			PhaseLune()\Mois = Month(PhaseLune()\Date)
			PhaseLune()\Jour = Day(PhaseLune()\Date)
			PhaseLune()\Heure = Hour(PhaseLune()\Date)
			PhaseLune()\Minute = Minute(PhaseLune()\Date)
		Next
		
	EndIf
EndProcedure

Procedure ObtenirPhaseLune(Annee_, Mois_, Jour_) ; Obtenir la phase de la lune
	Calculer_PhaseLune(Annee_, Mois_)
	Phase = -1
	ForEach PhaseLune()
		If Annee_ = PhaseLune()\An And Mois_ = PhaseLune()\Mois And Jour_ = PhaseLune()\Jour
			Phase = PhaseLune()\Phase
			Break
		EndIf
	Next
	ProcedureReturn Phase
EndProcedure

Procedure ObtenirHeurePhaseLune(Annee_, Mois_, Jour_) ; Obtenir l'heure de la phase de la lune
	Calculer_PhaseLune(Annee_, Mois_)
	Heure = -1
	ForEach PhaseLune()
		If Annee_ = PhaseLune()\An And Mois_ = PhaseLune()\Mois And Jour_ = PhaseLune()\Jour
			Heure = PhaseLune()\Heure
			Break
		EndIf
	Next
	ProcedureReturn Heure
EndProcedure

Procedure ObtenirMinutePhaseLune(Annee_, Mois_, Jour_) ; Obtenir la minute de la phase de la lune
	Calculer_PhaseLune(Annee_, Mois_)
	Minute = -1
	ForEach PhaseLune()
		If Annee_ = PhaseLune()\An And Mois_ = PhaseLune()\Mois And Jour_ = PhaseLune()\Jour
			Minute = PhaseLune()\Minute
			Break
		EndIf
	Next
	ProcedureReturn Minute
EndProcedure
Il est évident que ce programme peut être amélioré et optimisé, ceux qui veulent s'y atteler sont les bienvenus.

C'est grâce à vous que j'ai pu aligner ces lignes, alors c'est un peu un tribut que je vous doit !
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Calendrier défilant

Message par microdevweb »

Bonjour ça à l'aire pas mal et à du représenter beaucoup de travaille. Mais comme il y à pas mal de code, cela aurait peut'être plus facile si avais mis un fichier Zip plutôt que de mettre tous le code sur poste.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

J'aurais bien voulu mettre juste un Zip, mais je ne sais pas comment on fait ! :mrgreen:
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Calendrier défilant

Message par Ar-S »

Si tu n'as encore pas 7-zip
- Tu l'installes
- Ensuite tu mets en surbrillance tes x fichiers et tu fais un clique droit => 7-zip => Ajouter au fichier xxxx.7z
Pour l’hébergement
- Tu vas sur http://dl.free.fr/ et tu upload ton fichier.

Tu édites ensuite ton 1er post et tu ajoutes le lien avec le .7z
~~~~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
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

C'est corrigé !
Merci !
Rdv au premier post
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Calendrier défilant

Message par MLD »

@Micoute

Bonjours de ton voisin de la région de St Malo.

Pour avoir travaillé assez longuement sut les calendriers, je me permet de mettre en doute l'algo
que tu utilise pour la date de Paque. J'ai eu ce problème a l'époque et comme toi j'ai regardé sur le net. On trouves différrent calculs plus ou moins simple, j'était tomber sur une université (je ne sait plus l'aquelle) qui avait démontré que le seul calcul valable pour toutes les années a venir est celui ci- dessous.

Code : Tout sélectionner

Procedure calulftrelig(jr,mr,y);jr = jour, mr = mois, Y année 
;dimanche de paque
c.w = y / 100 
n.w =  (y % 19) 
k.w = (c - 17) / 25 
b.w = c /4 
e.w = (c - k) / 3 
f.w = c - b - e + (19 * n) + 15 
h.w =  (f % 30) 
p.w = h / 28 
q.w = 29 / (h + 1)
r.w = (21 - n) / 11 
i.w = h - (p * (1 - (p * q * r)))
s.w = y / 4 
t.w = c / 4 
u.w = y + s + i + 2 - c + t 
j.w =  (u % 7) 
w.w = (i - j + 40) / 44  
m.w = 3 + w  
x.w = m / 4 
d.w = i - j + 28 - (31 * x)
 Dimanchepaque$ = FormatDate("%dd%mm%yyyy",Date(y,m,d,0,0,0))  
 lundipaque$ = FormatDate("%dd%mm%yyyy",AddDate(Date(y,m,d,0,0,0),#PB_Date_Day,1))
EndProcedure
Personnelement je ne suis pas partisant d'un zipage des codes mis sur le forum. C'est a mon avis le meilleur moyen pour que personne ne le lise. un produit finis en EXE oui.
Je rappel que chaque message peut contenir 60 000 caractères alors :cry:
Regarde sur le fofo US , il y a parfois des codes longs et personne ne dit rien. :wink:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

Merci beaucoup pour cette contribution, j’apprécie et j'adopte.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Calendrier défilant

Message par Kwai chang caine »

Personnelement je ne suis pas partisant d'un zipage des codes mis sur le forum. C'est a mon avis le meilleur moyen pour que personne ne le lise
D'accord avec toi, sans parler des milliers de liens qui sont rompus au fil du temps :wink:
Et que tout le monde cours après le fichier qui était derrière en demandant si quelqu'un a eu la chance de le télécharger auparavant et surtout de le garder :(
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Calendrier défilant

Message par Ar-S »

Pourquoi l'un ou l'autre ?
Rien n'empêche de proposer un code et une archive si besoin.
~~~~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
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier défilant

Message par Micoute »

Dans ce cas il va manquer le fichier principal Calendrier défilant.pb, le voici :

Code : Tout sélectionner

IncludeFile #PB_Compiler_FilePath+"Fonctions_Date.pbi"
IncludeFile #PB_Compiler_FilePath+"Phases de la lune.pb"
IncludeFile #PB_Compiler_FilePath+"Fêtes mobiles et fixes.pb"
; 
InitSprite() 
InitKeyboard()
InitMouse()
; 
Enumeration
	;
	; fenetre
	;
	#Fenetre_principale 
	;
	; gadgets
	;
	#Bouton_Quitter
	#Police
	#Police2
	#Police_Bouton_Quitter
	; 
	; actions 
	; 
	#f_sortie 
	#f_aucune 
	; 
	; images 
	; 
	
	; 
EndEnumeration 
; 

#Faux = 0
#Vrai = 1

If LoadFont(#Police, "Calibri", 12, #PB_Font_Bold)
	Global Calibri_12.i = FontID(#Police)
EndIf
If LoadFont(#Police_Bouton_Quitter, "Calibri", 12, #PB_Font_Bold)
	Global IdPolice_Bouton_Quitter.i = FontID(#Police_Bouton_Quitter)
EndIf

Global Dim Mois$(12)
Global Phase.i

Declare Affiche(Annee)

;-
Global Quitter.b = #Faux, Fete_des_meres.i, Fete_des_peres.i, Fete_des_grand_meres.i, Fete_des_grand_peres.i, Heure_d_ete.i, Heure_d_hiver.i

Global.i CoulFond = $C0FFFF, CoulTexte, MoisEnCours = Month(Date()), Annee = Year(Date())
Global.s Masque = "%dddd %dd", Masque2 = "%dddd %dd %mmmm %yyyy" 
Global.i X = 2 , Y = 60, i, Num_Mois, XX = x, YY = y, EspaceMois

ExamineDesktops() 
Global.i Largeur_ecran = DesktopWidth(0) 
Global.i Hauteur_ecran = DesktopHeight(0) 
Global.i Prof_ecran = DesktopDepth(0) 

EspaceMois = Largeur_ecran / 6
; 
; ouvrir une fenêtre maximisée la même taille que le bureau et sans bordure
; 
Global.i F_principale_h = OpenWindow(#Fenetre_principale,0,0,Largeur_ecran,Hauteur_ecran,"Sprite Engine",#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Maximize) 
; 
; ouvrir un écran de la même taille que la fenêtre (c'est à dire couvrant l'ensemble)
; 
OpenWindowedScreen(F_principale_h.i,0,0,Largeur_ecran,Hauteur_ecran,0,0,0,#PB_Screen_SmartSynchronization) 

SetClassLongPtr_(ScreenID(),#GCL_HCURSOR, LoadCursor_(0, #IDC_HAND)) ; SetClassLongPtr_ = Compatibilité 32-64 bits
ShowCursor_(#True) ; montrer le curseur

ClearScreen($FF89C0)
StartDrawing(ScreenOutput())

DrawingFont(Calibri_12)
DrawingMode(#PB_2DDrawing_AlphaChannel)
FrontColor($000000) : BackColor($FFC0C0)

;-
Declare AfficheSaison(CoulFond)

Procedure TraitVertical(X, Y, Hauteur, Epaisseur=1, Couleur=0) ; Trace un trait vertical avec épaisseur et couleur choisies
	Protected i = 0
	
	If Epaisseur >0
		While i < Epaisseur
			Line(x+i,y,1,Hauteur,Couleur)
			i+1
		Wend
	Else
		Line(x,y,1,Hauteur,Couleur)
	EndIf
EndProcedure

Procedure TraitHorizontal(X, Y, Longueur, Epaisseur=1, Couleur=0) ; Trace un trait horizontal avec épaisseur et couleur choisies
	Protected i = 0
	
	If Epaisseur > 0
		While i < Epaisseur
			Line(x,y+i,Longueur,1,Couleur)
			i+1
		Wend
	Else
		Line(x,y,Longueur,1,Couleur)
	EndIf
EndProcedure

Procedure Cadre(x, y, Largeur, Hauteur, Epaisseur=1, CouleurCadre=0); Trace un cadre simple de la couleur choisie
		;Ligne supérieure
		TraitHorizontal(x,y,Largeur, Epaisseur, CouleurCadre)
		;Ligne gauche
		TraitVertical(x,y,Hauteur+Epaisseur,Epaisseur,CouleurCadre)
		;Ligne droite
		TraitVertical(x+Largeur,y,Hauteur+Epaisseur,Epaisseur,CouleurCadre)
    	;Ligne inférieure
    	TraitHorizontal(x,y+Hauteur,Largeur,Epaisseur,CouleurCadre)
EndProcedure
    

Procedure CadreColore(x, y, Largeur, Hauteur, Epaisseur=1, CouleurCadre=0, CouleurFond=0); Trace un cadre plein avec la couleur choisie
	Cadre(x, y, Largeur, Hauteur, Epaisseur, CouleurCadre)
    ;Remplir le cadre
    FillArea(x+Largeur/2,y+Hauteur/2,CouleurCadre,CouleurFond)
EndProcedure

Macro Is(expression)
  ((expression) Or 0)
EndMacro

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

Procedure CentrerTexte(Fenetre.I, y.I, Texte.s, Couleur) ; Centre le texte dans la fenêtre à la hauteur et à la couleur choisies.
	DrawText((DesktopWidth(Fenetre)-TextWidth(Texte))/2, y, Texte, Couleur)
EndProcedure

Procedure Calculer()
	
	CadreColore(XX, YY - 20, EspaceMois * 6, 670, 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
	z = 0
	Num_Mois = MoisEnCours
	While Num_Mois < 13
		Affiche(Annee)
		Num_Mois+1
		If Num_Mois = 13
			Num_Mois = 1
			Annee + 1
		EndIf
		z + 1
		If z < 5 And Num_Mois > 12
			Num_Mois = 1
			Annee + 1
			While Num_Mois < 13 And z < 5
				Affiche(Annee)
				Num_Mois + 1
				z + 1
			Wend
		EndIf
		If z > 5 ; si 6 mois sont affichés c'est suffisant
			Break
		EndIf
	Wend
	
	XX = x
	
	For i = 1 To 5
		TraitVertical(((i * EspaceMois)+ XX),YY-20, 670,2, $000000) ; Traits entre chaque mois
	Next
	
	TraitHorizontal(XX, YY, EspaceMois * 6, 2, $000000) ; Trait sous les mois
	
	DrawingFont(Calibri_12)
	
	;- Hiver
	If Mois$(MoisEnCours) = "Janvier"
		FillArea(XX + 20 , 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 , 41, Mois$(1), $000000, $EEEEEE)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 + EspaceMois, 41, Mois$(2), $000000, $EEEEEE)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(3), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(4), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*4) , 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 + (EspaceMois*4) , 41, Mois$(5), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(6), $000000, $00F0F0)
	EndIf
	
	If Mois$(MoisEnCours) = "Février"
		FillArea(XX + 20 , 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 , 41, Mois$(2), $000000, $EEEEEE)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 + EspaceMois, 41, Mois$(3), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20 + (EspaceMois*2), 41, Mois$(4), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*3) , 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 + (EspaceMois*3) , 41, Mois$(5), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(6), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 + (EspaceMois*5), 41, Mois$(7), $000000, $00F0F0)
	EndIf
	
	;- Printemps
	If  Mois$(MoisEnCours) = "Mars"
		FillArea(XX + 20 , 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 , 41, Mois$(3), $000000, $72D772)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20 + EspaceMois, 41, Mois$(4), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*2) , 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 + (EspaceMois*2) , 41, Mois$(5), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(6), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 + (EspaceMois*4), 41, Mois$(7), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 + (EspaceMois*5), 41, Mois$(8), $000000, $00F0F0)	
	EndIf
	
	If  Mois$(MoisEnCours) = "Avril"
		FillArea(XX + 20, 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20, 41, Mois$(4), $000000, $72D772)
		FillArea(XX + 20 + EspaceMois , 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 + EspaceMois , 41, Mois$(5), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(6), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 + (EspaceMois*3), 41, Mois$(7), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 + (EspaceMois*4), 41, Mois$(8), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 + (EspaceMois*5), 41, Mois$(9), $000000, $81C5FE)	
	EndIf
	
	If  Mois$(MoisEnCours) = "Mai"
		FillArea(XX + 20 , 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 , 41, Mois$(5), $000000, $72D772)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 +(EspaceMois), 41, Mois$(6), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 + (EspaceMois*2), 41, Mois$(7), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 + (EspaceMois*3), 41, Mois$(8), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 + (EspaceMois*4), 41, Mois$(9), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(10), $000000, $81C5FE)	
	EndIf
	
	;- été
	If  Mois$(MoisEnCours) = "Juin"
		FillArea(XX + 20 , 50, $000000, $00F0F0) ; été 1
		DrawText(XX + 20 , 41, Mois$(6), $000000, $00F0F0)
		FillArea(XX + 20 +EspaceMois, 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 +EspaceMois, 41, Mois$(7), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 + (EspaceMois*2), 41, Mois$(8), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 + (EspaceMois*3), 41, Mois$(9), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(10), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $81C5FE) ; automne 3
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(11), $000000, $81C5FE)	
	EndIf
	
	If  Mois$(MoisEnCours) = "Juillet"
		FillArea(XX + 20 , 50, $000000, $00F0F0) ; été 2
		DrawText(XX + 20 , 41, Mois$(7), $000000, $00F0F0)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 + EspaceMois, 41, Mois$(8), $000000, $00F0F0)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 + (EspaceMois*2), 41, Mois$(9), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(10), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $81C5FE) ; automne 3
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(11), $000000, $81C5FE)
		FillArea(XX + 20 +(EspaceMois*5), 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(12), $000000, $EEEEEE)
	EndIf
	
	If  Mois$(MoisEnCours) = "Août"
		FillArea(XX + 20 , 50, $000000, $00F0F0) ; été 3
		DrawText(XX + 20 , 41, Mois$(8), $000000, $00F0F0)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 + EspaceMois, 41, Mois$(9), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(10), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $81C5FE) ; automne 3
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(11), $000000, $81C5FE)
		FillArea(XX + 20 +(EspaceMois*4), 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(12), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*5), 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(1), $000000, $EEEEEE)
	EndIf
	
	
	;- Automne
	If  Mois$(MoisEnCours) = "Septembre"
		FillArea(XX + 20 , 50, $000000, $81C5FE) ; automne 1
		DrawText(XX + 20 , 41, Mois$(9), $000000, $81C5FE)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 +(EspaceMois), 41, Mois$(10), $000000, $81C5FE)
		FillArea(XX + 20 + (EspaceMois*2), 50, $000000, $81C5FE) ; automne 3
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(11), $000000, $81C5FE)
		FillArea(XX + 20 +(EspaceMois*3), 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(12), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*4), 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(1), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*5), 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(2), $000000, $EEEEEE)
	EndIf
	
	If  Mois$(MoisEnCours) = "Octobre"
		FillArea(XX + 20, 50, $000000, $81C5FE) ; automne 2
		DrawText(XX + 20 , 41, Mois$(10), $000000, $81C5FE)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $81C5FE)
		DrawText(XX + 20 +(EspaceMois), 41, Mois$(11), $000000, $81C5FE)
		FillArea(XX + 20 +(EspaceMois*2), 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(12), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*3), 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(1), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*4), 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(2), $000000, $EEEEEE)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(3), $000000, $72D772)
	EndIf
	
	If  Mois$(MoisEnCours) = "Novembre"
		FillArea(XX + 20, 50, $000000, $81C5FE) ; automne 3
		DrawText(XX + 20, 41, Mois$(11), $000000, $81C5FE)
		FillArea(XX + 20 +(EspaceMois), 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 +(EspaceMois), 41, Mois$(12), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*2), 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(1), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*3), 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(2), $000000, $EEEEEE)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(3), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(4), $000000, $72D772)
	EndIf
	
	If Mois$(MoisEnCours) = "Décembre"
		FillArea(XX + 20 , 50, $000000, $EEEEEE) ; hiver 1
		DrawText(XX + 20 , 41, Mois$(12), $000000, $EEEEEE)
		DrawText(XX + 20 + EspaceMois, 41, Mois$(12), $000000, $EEEEEE)
		FillArea(XX + 20 + EspaceMois, 50, $000000, $EEEEEE) ; hiver 2
		DrawText(XX + 20 + EspaceMois, 41, Mois$(1), $000000, $EEEEEE)
		FillArea(XX + 20 +(EspaceMois*2), 50, $000000, $EEEEEE) ; hiver 3
		DrawText(XX + 20 +(EspaceMois*2), 41, Mois$(2), $000000, $EEEEEE)
		FillArea(XX + 20 + (EspaceMois*3), 50, $000000, $72D772) ; printemps 1
		DrawText(XX + 20 +(EspaceMois*3), 41, Mois$(3), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*4), 50, $000000, $72D772) ; printemps 2
		DrawText(XX + 20 +(EspaceMois*4), 41, Mois$(4), $000000, $72D772)
		FillArea(XX + 20 + (EspaceMois*5), 50, $000000, $72D772) ; printemps 3
		DrawText(XX + 20 +(EspaceMois*5), 41, Mois$(5), $000000, $72D772)
	EndIf
	;- Légende
	DrawingFont(Calibri_12)
	BackColor(Point(0,0))
	TraitHorizontal(10, 730, 50, 20, $72D772) : DrawText(70, 730, "Printemps",$000000) : Cadre(10, 730, 50, 20, 1, $0)
	TraitHorizontal(310, 730, 50, 20, $00F0F0) : DrawText(370, 730, "Eté",$000000) : Cadre(310, 730, 50, 20, 1, $0)
	TraitHorizontal(610, 730, 50, 20, $81C5FB) : DrawText(670, 730, "Automne",$000000) : Cadre(610, 730, 50, 20, 1, $0)
	TraitHorizontal(910, 730, 50, 20, $EEEEEE) : DrawText(970, 730, "Hiver",$000000) : Cadre(910, 730, 50, 20, 1, $0)	
	;...
EndProcedure
;

Procedure Affiche(Annee)	
	For i = 1 To Jours_dans_le_mois(Annee,Num_Mois)
		Global DateJour.s =ChaineDate(Masque,Date(Annee,Num_Mois,i,0,0,0))
		Global JourSemaine.s = StringField(DateJour, 1, " ")
		Global JourSemaine = UCase(Left(JourSemaine,1))+Right(JourSemaine,Len(JourSemaine)-1)
		Global JourMois.s = StringField(DateJour, 2, " "), JourMois2.s
		Global DizJourMois = Val(Left(JourMois,1))
		Global UnJourMois = Val(Right(JourMois,1))
		
		Phase = ObtenirPhaseLune(Annee, Num_Mois, Val(JourMois))		
		
		Select Phase
			Case 0
				Texte$ = "NL"			
			Case 1
				Texte$ = "PQ"
			Case 2
				Texte$ = "PL"
			Case 3
				Texte$ = "DQ"
		EndSelect
		
		FrontColor(0)
		BackColor(CoulFond)
		Si(Phase <> -1, DrawText(XX + 50, YY, Texte$), DrawText(XX + 50, YY, "")) ; Afficher la phase de la lune
		Texte$ = ""
		
		Select JourSemaine ;- sélection Jds
			Case "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"
				FrontColor($00)
				BackColor(CoulFond)
				DrawText(XX + 2, YY, LSet(JourSemaine,2," ")+"   ") ; Jours de semaine en noir
				If UnJourMois > 0 And DizJourMois
					DrawText(XX + 26, YY, Str(DizJourMois)) ; dizaine du mois
					DrawText(XX + 26 + TextWidth("0"), YY, Str(UnJourMois)) ; Jour du mois
				ElseIf DizJourMois < 1
					DrawText(XX + 26 + TextWidth("0"), YY, Str(UnJourMois)) ; dizaine du mois
				ElseIf DizJourMois > 0 And UnJourMois = 0 ; 10 20 ou 30
					DrawText(XX + 26, YY, Str(DizJourMois)) ; dizaine du mois
					DrawText(XX + 26 + TextWidth("0"), YY, "0") ; Jour du mois			
				EndIf
				;- fêtes mobiles semaine
				CoulTexte = $FF
				Select JourMois						
					Case StringField(ChaineDate(Masque2, Mardi_Gras(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Mardi_Gras(Annee)), 3, " ")):Texte$ = "Mardi gras":EndIf
					Case StringField(ChaineDate(Masque2, Cendres(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Cendres(Annee)), 3, " ")):Texte$ = "Mercredi des Cendres":EndIf
					Case StringField(ChaineDate(Masque2, Jeudi_Saint(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Jeudi_Saint(Annee)), 3, " ")):Texte$ = "Jeudi Saint":EndIf
					Case StringField(ChaineDate(Masque2, Vendredi_Saint(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Vendredi_Saint(Annee)), 3, " ")):Texte$ = "Vendredi Saint":EndIf
					Case StringField(ChaineDate(Masque2, PaquesLundi(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, PaquesLundi(Annee)), 3, " ")):Texte$ = "Lundi de Pâques":EndIf
					Case StringField(ChaineDate(Masque2, Ascension(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Ascension(Annee)), 3, " ")):Texte$ = "Ascension":EndIf
					Case StringField(ChaineDate(Masque2, PentecoteLundi(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, PentecoteLundi(Annee)), 3, " ")):Texte$ = "Lundi de Pentecôte":EndIf
				EndSelect
				DrawText(XX + 70, YY, Texte$, CoulTexte)
				Texte$ = ""
				;- anniv semaine
				If JourMois = "24" And Num_Mois = 2 : DrawText(XX + 70, YY, "Anniv Maëlys " + Str(Annee-2011)) : EndIf
				If JourMois = "17" And Num_Mois = 3 : DrawText(XX + 70, YY, "Anniv Sonia "+Str(Annee-1990)) : EndIf
				If JourMois = "06" And Num_Mois = 4 : DrawText(XX + 70, YY, "Anniv Pierre "+Str(Annee-2011)) : EndIf					
				If JourMois = "19" And Num_Mois = 6 : DrawText(XX + 70, YY, "Anniv papa "+Str(Annee-1950)) : EndIf
				If JourMois = "21" And Num_Mois = 8 : DrawText(XX + 70, YY, "Anniv maman "+Str(Annee-1956)) : EndIf
				If JourMois = "24" And Num_Mois = 8 : DrawText(XX + 70, YY, "Anniv Sarah "+Str(Annee-1986)) : EndIf
				If JourMois = "10" And Num_Mois = 10 : DrawText(XX + 70, YY, "Anniv mimi "+Str(Annee-1983)) :EndIf
				If JourMois = "30" And Num_Mois = 11 : DrawText(XX + 70, YY, "Anniv Jérôme "+Str(Annee-1987)) : EndIf
				If JourMois = "15" And Num_Mois = 11 : DrawText(XX + 70, YY, "Anniv Amélie "+Str(Annee-1990)) : EndIf
				
			Case "Dimanche" ;- sélection dimanche
				FrontColor($FF)
				BackColor(CoulFond)
				DrawText(XX + 2, YY, LSet(JourSemaine,2," ")+"   ") ; dimanche en rouge
				If UnJourMois > 0 And DizJourMois
					DrawText(XX + 26, YY, Str(DizJourMois)) ; dizaine du MoisEnCours
					DrawText(XX + 26 + TextWidth("0"), YY, Str(UnJourMois)) ; Jour du MoisEnCours
				ElseIf DizJourMois < 1
					DrawText(XX + 26 + TextWidth("0"), YY, Str(UnJourMois)) ; dizaine du MoisEnCours
				ElseIf DizJourMois > 0 And UnJourMois = 0 ; 10 20 ou 30
					DrawText(XX + 26, YY, Str(DizJourMois)) ; dizaine du mois
					DrawText(XX + 26 + TextWidth("0"), YY, "0") ; Jour du mois					
				EndIf
				;- fêtes mobile dimanche
				Select JourMois
					Case StringField(ChaineDate(Masque2, Paques(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Paques(Annee)), 3, " ")):Texte$ = "Pâques":EndIf
					Case StringField(ChaineDate(Masque2, Fete_des_grand_meres(Annee)), 2 , " ")
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Fete_des_grand_meres(Annee)), 3, " ")):Texte$ = "Fête des Grand-Mères":EndIf
					Case StringField(ChaineDate(Masque2, Passion(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Passion(Annee)), 3, " ")):Texte$ = "Passion":EndIf						
					Case StringField(ChaineDate(Masque2, Pentecote(Annee)), 2 , " ")
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Pentecote(Annee)), 3, " ")):Texte$ = "Pentecôte":EndIf
					Case StringField(ChaineDate(Masque2, FeteDesMeres(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, FeteDesMeres(Annee)), 3, " ")):Texte$ = "Fête des Mères":EndIf
					Case StringField(ChaineDate(Masque2, Fete_des_peres(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Fete_des_peres(Annee)), 3, " ")):Texte$ = "Fête des Pères":EndIf
					Case StringField(ChaineDate(Masque2, Fete_des_grand_peres(Annee)), 2 , " ") 
						If UCase(Mois$(Num_Mois)) = UCase(StringField(ChaineDate(Masque2, Fete_des_grand_peres(Annee)), 3, " ")):Texte$ = "Fêtes des Grand-Pères":EndIf
				EndSelect
				;- décalage horaire
				If JourMois = StringField(ChaineDate(Masque2, Heure_d_ete(Annee)), 2 , " ") And Num_Mois = 3 : Texte$ = "Heure d'été +1" : EndIf				
				If JourMois = StringField(ChaineDate(Masque2, Heure_d_hiver(Annee)), 2 , " ") And Num_Mois = 10 : Texte$ = "Heure d'hiver -1" : EndIf
				
				If JourMois =  StringField(ChaineDate(Masque2, Rameaux(Annee)), 2 , " ") And Num_Mois = 3 : Texte$ = "Rameaux"
				ElseIf JourMois = StringField(ChaineDate(Masque2, Rameaux(Annee)), 2 , " ") And Num_Mois = 4 : Texte$ = "Rameaux"
				EndIf
				DrawText(XX + 70, YY, Texte$, CoulTexte)
				;- anniv dimanche
				If JourMois = "24" And Num_Mois = 2 : DrawText(XX + 70, YY, "Anniv Maëlys " + Str(Annee-2011)) : EndIf
				If JourMois = "17" And Num_Mois = 3 : DrawText(XX + 70, YY, "Anniv Sonia "+Str(Annee-1990)) : EndIf
				If JourMois = "06" And Num_Mois = 4 : DrawText(XX + 70, YY, "Anniv Pierre "+Str(Annee-2011)) : EndIf
				If JourMois = "19" And Num_Mois = 6 : DrawText(XX + 70, YY, "Anniv papa "+Str(Annee-1950)) : EndIf
				If JourMois = "21" And Num_Mois = 8 : DrawText(XX + 70, YY, "Anniv maman "+Str(Annee-1956)) : EndIf
				If JourMois = "24" And Num_Mois = 8 : DrawText(XX + 70, YY, "Anniv Sarah "+Str(Annee-1986)) : EndIf
				If JourMois = "10" And Num_Mois = 10 : DrawText(XX + 70, YY, "Anniv mimi "+Str(Annee-1983)) : EndIf
				If JourMois = "30" And Num_Mois = 11 : DrawText(XX + 70, YY, "Anniv Jérôme "+Str(Annee-1987)) : EndIf
				If JourMois = "15" And Num_Mois = 11 : DrawText(XX + 70, YY, "Anniv Amélie "+Str(Annee-1990)) : EndIf
		EndSelect			
		
		;- Fêtes fixes
		If JourMois = "01" And Num_Mois = 1 : DrawText(XX + 70, YY, "Nouvel An", $FF) : EndIf		
		If JourMois = "01" And Num_Mois = 5 : DrawText(XX + 70, YY, "Fête du travail", $FF) : EndIf		
		If JourMois = "08" And Num_Mois = 5 : DrawText(XX + 70, YY, "Victoire 1945", $FF) : EndIf		
		If JourMois = "14" And Num_Mois = 7 : DrawText(XX + 70, YY, "Fête Nationale", $FF) : EndIf		
		If JourMois = "15" And Num_Mois = 8 : DrawText(XX + 70, YY, "Assomption", $FF) : EndIf		
		If JourMois = "01" And Num_Mois = 11 : DrawText(XX + 70, YY, "Toussaint", $FF) : EndIf		
		If JourMois = "11" And Num_Mois = 11 : DrawText(XX + 70, YY, "Armistice 1918", $FF) : EndIf		
		If JourMois = "25" And Num_Mois = 12 : DrawText(XX + 70, YY, "Noël", $FF) : EndIf		
		If JourMois = "31" And Num_Mois = 12 : DrawText(XX + 70, YY, "St Sylvestre", $FF) : EndIf
		;- Affichage saisons
		If SiBissextile(Annee)= #Faux
			If Num_Mois = 3 And JourMois = "21" : AfficheSaison($72D772)
			ElseIf Num_Mois = 6 And JourMois = "22" : AfficheSaison($00F0F0)
			ElseIf Num_Mois = 9 And JourMois = "23" : AfficheSaison($81C5FE)
			ElseIf Num_Mois = 12 And  JourMois = "22" : AfficheSaison($EEEEEE)
			EndIf
		Else
			If Num_Mois = 3 And JourMois = "20" : AfficheSaison($72D772)
			ElseIf Num_Mois = 6 And JourMois = "21" : AfficheSaison($00F0F0)
			ElseIf Num_Mois = 9 And  JourMois = "22" : AfficheSaison($81C5FE)
			ElseIf Num_Mois = 12 And  JourMois = "21" : AfficheSaison($EEEEEE)
			EndIf
		EndIf
		
		If JourMois = RSet(Str(Day(Date())), 2, "0") And Num_Mois = Month(Date()) ;- AuJourd'hui
			Si( JourSemaine = "Dimanche", CoulTexte = $FF, CoulTexte = 0) ; Blanc sur fond rouge ou blanc sur fond noir
			
			DrawText(XX +2, YY, LSet(JourSemaine, 2, " ")+"    ", $FFFFFF, CoulTexte)
			si(JourMois >= "10", JourMois=Left(JourMois,2), JourMois="  "+Right(JourMois,1))
			DrawText(XX + 26, YY, JourMois+" "+Str(DayOfYear(Date()))+"/"+Str(365+SiBissextile(Annee)-DayOfYear(Date())), $FFFFFF, CoulTexte)
			
			;TraitHorizontal(1210, 730, 50, 20, CoulTexte)
			DrawText(1270, 730, "AuJourd'hui", CoulFond, CoulTexte) ; légende
		EndIf
		YY + TextHeight(" ")+ 2
	Next
	XX + EspaceMois
	YY = Y
EndProcedure

Procedure AfficheSaison(CoulFond)
	DrawText(XX + 2, YY, LSet(JourSemaine,2," ")+"   ", 0, CoulFond) ; Saison
	DrawText(XX + 26, YY, JourMois, 0, CoulFond) ; Jour du mois
EndProcedure

Calculer()
CentrerTexte(#Fenetre_principale,10,"Pressez une touche ou cliquez un bouton de la souris pour sortir",$00FFFF)
StopDrawing()
FlipBuffers()

;- 
;- gestion des événements en boucle sans fin
; 
Global action.i = #f_aucune 
Repeat 
	Global event = WindowEvent() 
	Select event 
		Case #PB_Event_CloseWindow 
			action = #f_sortie 
		Case 0 
			; 
			; il n'y a pas d'événements, donc faisons nos trucs graphiques
			; 
			ExamineKeyboard() 
			If KeyboardPushed(#PB_Key_All) 
				action = #f_sortie 
			EndIf 
			
			ExamineMouse()
			Resultat = MouseButton(#PB_MouseButton_Left)
			If  Resultat = 1
				action = #f_sortie
			EndIf
			Resultat = MouseButton(#PB_MouseButton_Middle)
			If  Resultat = 1
				action = #f_sortie
			EndIf
			Resultat = MouseButton(#PB_MouseButton_Right)
			If  Resultat = 1
				action = #f_sortie
			EndIf
			; 
			; et montrons des choses sur l'écran
			; 
			FlipBuffers() 
			; 
	EndSelect 
Until action = #f_sortie 
; 
; fermer l'écran et la fenêtre en douceur
; 
CloseScreen() 
CloseWindow(#Fenetre_principale)
J'ai encore bien des choses à apprendre, mais je sais que vous allez m'aider, alors je reste tranquille.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Calendrier défilant

Message par MLD »

Salut Micoute
Bon travail. Mais petits problèmes
Tu ne tiens pas compte de la résolution d'écran, donc avec certaines résolutions (expl ordi portable) ton calendrier sort de l'écran.
Explique ce que veut dire DQ,PQ ect, car j'ai l'impression que le lundi 22 septembre "il faut d'urgence allez acheter du PQ". 8O :D :lol: Pense a l'utilisateur.
Trés bonne idée de faire une présentation de ton calendrier style " carton affichable au mur "
Tu es dans la bonne voie pour la maitrise de PB :lol:

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

Re: Calendrier défilant

Message par Micoute »

Je ne comprend pas que ça déborde étant donné que j'ai mis :

Global.i Largeur_ecran = DesktopWidth(0)
Global.i Hauteur_ecran = DesktopHeight(0)
Global.i Prof_ecran = DesktopDepth(0)

à moins qu'il y aurait un bug

Quant aux abréviations, se sont les phases de la lune, PQ = premier quartier, PL = pleine lune, DQ = dernier quartier et NL = nouvelle lune
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre