Je viens de terminer mon calendrier intelligent, alors je viens le partager avec vous, il y sûrement d'autres méthodes, je n'en doute pas !
Code : Tout sélectionner
;Calendrier intelligent
XIncludeFile "D:\Programmation\Prg Perso\Include\Date2.pbi" ; Changez le chemin pour qu'il fonctionne{ Windows
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration Gadgets
#Txt_Mois
#Str_Jour_1
#Str_Jour_2
#Str_Jour_3
#Str_Jour_4
#Str_Jour_5
#Str_Jour_6
#Str_Jour_7
#Str_Jour_8
#Str_Jour_9
#Str_Jour_10
#Str_Jour_11
#Str_Jour_12
#Str_Jour_13
#Str_Jour_14
#Str_Jour_15
#Str_Jour_16
#Str_Jour_17
#Str_Jour_18
#Str_Jour_19
#Str_Jour_20
#Str_Jour_21
#Str_Jour_22
#Str_Jour_23
#Str_Jour_24
#Str_Jour_25
#Str_Jour_26
#Str_Jour_27
#Str_Jour_28
#Str_Jour_29
#Str_Jour_30
#Str_Jour_31
#Txt_Jour_1
#Txt_Jour_2
#Txt_Jour_3
#Txt_Jour_4
#Txt_Jour_5
#Txt_Jour_6
#Txt_Jour_7
#Txt_Jour_8
#Txt_Jour_9
#Txt_Jour_10
#Txt_Jour_11
#Txt_Jour_12
#Txt_Jour_13
#Txt_Jour_14
#Txt_Jour_15
#Txt_Jour_16
#Txt_Jour_17
#Txt_Jour_18
#Txt_Jour_19
#Txt_Jour_20
#Txt_Jour_21
#Txt_Jour_22
#Txt_Jour_23
#Txt_Jour_24
#Txt_Jour_25
#Txt_Jour_26
#Txt_Jour_27
#Txt_Jour_28
#Txt_Jour_29
#Txt_Jour_30
#Txt_Jour_31
#Str_Commentaire
#Btn_Enregistrer
#Txt_Evenement
EndEnumeration
Enumeration Polices
#PoliceGras
EndEnumeration
Enumeration Fichiers
#Fichier_cvs
EndEnumeration
LoadFont(#PoliceGras, "Arial", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#PoliceGras))
;}
;{ Variables
Global Event, Bouton = #False
Global Mois = Month(Date())
Global Annee = Year(Date())
Global NbJours = JoursDansMois(Annee, Mois)
Global X, Fichier.s = "rappels.csv"
;}
Procedure MiseAJourBouton()
If GetGadgetText(#Str_Commentaire) = ""
If Bouton = #True
HideGadget(#Btn_Enregistrer, #True)
Bouton = #False ; Mettre à jour la variable globale
EndIf
Else
If Bouton = #False
HideGadget(#Btn_Enregistrer, #False)
Bouton = #True ; Mettre à jour la variable globale
EndIf
EndIf
EndProcedure
Procedure SauvegarderRappel(Jour, Mois, Annee, Commentaire.s)
If OpenFile(#Fichier_cvs, Fichier, #PB_File_Append) ; Ouverture en mode ajout
FileSeek(#Fichier_cvs, Lof(#Fichier_cvs))
WriteStringN(#Fichier_cvs, Str(Jour) + "," + Str(Mois) + "," + Str(Annee) + "," + Commentaire)
CloseFile(#Fichier_cvs)
EndIf
EndProcedure
Procedure ChargerRappels()
If OpenFile(#Fichier_cvs, Fichier)
While Not Eof(#Fichier_cvs)
Ligne.s = ReadString(#Fichier_cvs)
Debug "Rappel chargé : " + Ligne
; Extraction des valeurs de la ligne CSV
Global Jour = Val(StringField(Ligne, 1, ","))
Global MoisR = Val(StringField(Ligne, 2, ","))
Global AnneeR = Val(StringField(Ligne, 3, ","))
Global Commentaire.s = StringField(Ligne, 4, ",")
; Vérifie que le rappel correspond bien au mois et à l'année affichés
If MoisR = Mois And AnneeR = Annee
Global GadgetID = #Str_Jour_1 + (Jour - 1) ; Trouve le gadget correspondant
SetGadgetText(GadgetID, Commentaire) ; Affiche le rappel dans la case du jour
EndIf
Wend
CloseFile(#Fichier_cvs)
EndIf
EndProcedure
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 0, 0, 560, 590, "Calendrier intelligent", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
TextGadget(#Txt_Mois, 10, 10, 540, 20, NomMois(Date(Annee, Mois, 1,0,0,0)) + " " + Str(Annee), #PB_Text_Center)
;{ Textes
TextGadget(#Txt_Jour_1, 20, 40, 70, 30, "1", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_2, 95, 40, 70, 30, "2", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_3, 170, 40, 70, 30, "3", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_4, 245, 40, 70, 30, "4", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_5, 320, 40, 70, 30, "5", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_6, 395, 40, 70, 30, "6", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_7, 470, 40, 70, 30, "7", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_8, 20, 120, 70, 30, "8", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_9, 95, 120, 70, 30, "9", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_10, 170, 120, 70, 30, "10", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_11, 245, 120, 70, 30, "11", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_12, 320, 120, 70, 30, "12", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_13, 395, 120, 70, 30, "13", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_14, 470, 120, 70, 30, "14", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_15, 20, 200, 70, 30, "15", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_16, 95, 200, 70, 30, "16", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_17, 170, 200, 70, 30, "17", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_18, 245, 200, 70, 30, "18", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_19, 320, 200, 70, 30, "19", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_20, 395, 200, 70, 30, "20", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_21, 470, 200, 70, 30, "21", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_22, 20, 275, 70, 30, "22", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_23, 95, 275, 70, 30, "23", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_24, 170, 275, 70, 30, "24", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_25, 245, 275, 70, 30, "25", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_26, 320, 275, 70, 30, "26", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_27, 396, 275, 70, 30, "27", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_28, 470, 275, 70, 30, "28", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_29, 20, 355, 70, 30, "29", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_30, 95, 355, 70, 30, "30", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Txt_Jour_31, 170, 355, 70, 30, "31", #PB_Text_Center|#SS_CENTERIMAGE)
;}
;{ Chaînes
StringGadget(#Str_Jour_1, 20, 70, 70, 30, "")
StringGadget(#Str_Jour_2, 95, 70, 70, 30, "")
StringGadget(#Str_Jour_3, 170, 70, 70, 30, "")
StringGadget(#Str_Jour_4, 245, 70, 70, 30, "")
StringGadget(#Str_Jour_5, 320, 70, 70, 30, "")
StringGadget(#Str_Jour_6, 395, 70, 70, 30, "")
StringGadget(#Str_Jour_7, 470, 70, 70, 30, "")
StringGadget(#Str_Jour_8, 20, 150, 70, 30, "")
StringGadget(#Str_Jour_9, 95, 150, 70, 30, "")
StringGadget(#Str_Jour_10, 170, 150, 70, 30, "")
StringGadget(#Str_Jour_11, 245, 150, 70, 30, "")
StringGadget(#Str_Jour_12, 320, 150, 70, 30, "")
StringGadget(#Str_Jour_13, 395, 150, 70, 30, "")
StringGadget(#Str_Jour_14, 470, 150, 70, 30, "")
StringGadget(#Str_Jour_15, 20, 230, 70, 30, "")
StringGadget(#Str_Jour_16, 95, 230, 70, 30, "")
StringGadget(#Str_Jour_17, 170, 230, 70, 30, "")
StringGadget(#Str_Jour_18, 245, 230, 70, 30, "")
StringGadget(#Str_Jour_19, 320, 230, 70, 30, "")
StringGadget(#Str_Jour_20, 395, 230, 70, 30, "")
StringGadget(#Str_Jour_21, 470, 230, 70, 30, "")
StringGadget(#Str_Jour_22, 20, 310, 70, 30, "")
StringGadget(#Str_Jour_23, 95, 310, 70, 30, "")
StringGadget(#Str_Jour_24, 170, 310, 70, 30, "")
StringGadget(#Str_Jour_25, 245, 310, 70, 30, "")
StringGadget(#Str_Jour_26, 320, 310, 70, 30, "")
StringGadget(#Str_Jour_27, 395, 310, 70, 30, "")
StringGadget(#Str_Jour_28, 470, 310, 70, 30, "")
StringGadget(#Str_Jour_29, 20, 390, 70, 30, "")
StringGadget(#Str_Jour_30, 95, 390, 70, 30, "")
StringGadget(#Str_Jour_31, 170, 390, 70, 30, "")
;}
;{ Editeur
TextGadget(#Txt_Evenement, 10, 430, 520, 30, "", #PB_Text_Center)
StringGadget(#Str_Commentaire, 80, 470, 380, 30, "")
ButtonGadget(#Btn_Enregistrer, 220, 520, 100, 30, "Enregistrer")
HideGadget(#Btn_Enregistrer, #True)
GadgetToolTip(#Str_Commentaire, "entrez un commentaire")
;}
;{ Chargement rappels
ChargerRappels()
;}
;{ Aide contextuelle
For X = #Str_Jour_1 To #Str_Jour_31
GadgetToolTip(X, "Cliquez pour entrer un commentaire")
Next X
;}
;{ Assignation des couleurs aux jours fériés
For X = 1 To JoursDansMois(Annee, Mois)
If X <= NbJours ; Vérifie que X ne dépasse pas le nombre de jours du mois
GadgetID = #Txt_Jour_1 + (X - 1)
Y = JourDeSemaine(Date(Annee, Mois, X, 0, 0, 0)) ; Calcule le jour de la semaine
If Y = 0 Or Y = 6
SetGadgetColor(GadgetID, #PB_Gadget_FrontColor, $0000FF) ; Rouge pour les week-ends
EndIf
EndIf
Next
;}
;{ Jours surnuméraires
Select JoursDansMois(Annee, Mois)
Case 30
HideGadget(#Str_Jour_31, #True)
HideGadget(#Txt_Jour_31, #True)
Case 29
HideGadget(#Str_Jour_30, #True)
HideGadget(#Txt_Jour_30, #True)
HideGadget(#Str_Jour_31, #True)
HideGadget(#Txt_Jour_31, #True)
Case 28
HideGadget(#Str_Jour_29, #True)
HideGadget(#Txt_Jour_29, #True)
HideGadget(#Str_Jour_30, #True)
HideGadget(#Txt_Jour_30, #True)
HideGadget(#Str_Jour_31, #True)
HideGadget(#Txt_Jour_31, #True)
EndSelect
;}
EndIf
EndProcedure
Programme_principal()
;{- Boucle événementielle
Repeat
Event = WaitWindowEvent()
Select EventWindow()
Case #Fenetre_principale
Select Event
Case #PB_Event_Gadget
If EventGadget() >= #Str_Jour_1 And EventGadget() <= #Str_Jour_31
Jour = EventGadget()
SetGadgetText(#Txt_Evenement, "Événement pour le : " + Str(Jour) + "/" + Str(Mois) + "/" + Str(Annee))
SetActiveGadget(#Str_Commentaire)
Else
EndIf
If EventGadget() = #Btn_Enregistrer
Debug "Commentaire ajouté : " + GetGadgetText(#Str_Commentaire)
SauvegarderRappel(EventWindow(), Mois, Annee, GetGadgetText(#Str_Commentaire))
EndIf
If EventGadget() = #Str_Commentaire
MiseAJourBouton()
EndIf
Case #PB_Event_CloseWindow
If EventWindow() = #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
End
EndIf
EndSelect
EndSelect
ForEver
;}