Calendrier intelligent par Micoute

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

Calendrier intelligent par Micoute

Message par Micoute »

Bonjour à tous,

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
;}
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
Mindphazer
Messages : 693
Inscription : mer. 24/août/2005 10:42

Re: Calendrier intelligent par Micoute

Message par Mindphazer »

Bonjour Micoute,

il y a au moins une erreur sur cette ligne :

Code : Tout sélectionner

SauvegarderRappel(EventWindow(), Mois, Annee, GetGadgetText(#Str_Commentaire)) 
Ce n'est pas EventWindow() qu'il faut mettre, mais plutôt EventGadget(), sinon tu sauvegardes toujours le commentaire avec l'index 0 (valeur de EventWindow())

Il y a d'autres petits soucis ailleurs, il faut que je regarde plus en détail...
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calendrier intelligent par Micoute

Message par Micoute »

Bonjour à tous,

j'ai fait une nouvelle version qui fonctionne très bien.

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, 1080, "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, 925, 520, 30, "", #PB_Text_Center)
    StringGadget(#Str_Commentaire, 20, 965, 520, 30, "")
    ButtonGadget(#Btn_Enregistrer, 220, 1010, 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(Jour, 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
;}
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