Page 1 sur 1

Changement de réservoir de pompe à insuline

Publié : dim. 11/mai/2025 12:06
par Micoute
Bonjour à tous,

j'avais besoin de cet outil pour éviter que ma pompe à insuline sonne à des heures où je ne suis pas disponible pour changer le réservoir.

Si cette petite application peut servir à quelqu'un, c'est cadeau.

Code : Tout sélectionner

Enumeration Fichiers
  #Fichier
EndEnumeration
Enumeration Fenetres
  #Fenetre_principale
EndEnumeration
Enumeration Gadgets
  #Txt_Selection
  #Txt_Heure_changement
  #Txt_Dernier_Changement
  #Txt_Changement_prochain
  #txt_Dans
  #Dte_changement
  #Str_Heure_changement
  #Btn_Enregistrer
EndEnumeration
Enumeration Polices
  #Police
EndEnumeration
Global Evenement, Heure_dernier_rappel, Date_dernier_changement, Heure_dernier_changement, Date_prochain_changement.s, Jour, Mois, annee
LoadFont(#Police, "Louis George Cafe", 20, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))
; Fonction pour charger la dernière date du fichier texte
Procedure Chargement_Heure_dernier_changement()
  If FileSize("Dernier_changement.txt") > 0
    OpenFile(#Fichier, "Dernier_changement.txt")
    Heure_dernier_rappel = ReadQuad(#Fichier)
    CloseFile(#Fichier)
  Else
    Heure_dernier_rappel = 0
  EndIf
EndProcedure
; Fonction pour convertir HH:MM en timestamp
Procedure ConvertirHeure(dateBase.l, heure.s)
  Define hh, mm  
  hh = Val(StringField(heure, 1, ":"))
  mm = Val(StringField(heure, 2, ":"))
  
  ; Crée une nouvelle date avec l'année, mois et jour d'origine mais remplace l'heure et les minutes
  ProcedureReturn Date(Year(dateBase), Month(dateBase), Day(dateBase), hh, mm, 0)
EndProcedure
; Fonction pour enregistrer une nouvelle date
Procedure Sauvegarde_Heure_dernier_changement()
  OpenFile(#Fichier, "Dernier_changement.txt")
  WriteQuad(#Fichier, Heure_dernier_rappel)  ; Enregistre la date et l'heure en format timestamp
  CloseFile(#Fichier)
EndProcedure
; Fonction pour vérifier le rappel
Procedure Rappel_Controle()
  Define Heure_Actuelle = Date()  
  If Heure_dernier_rappel = 0 Or Heure_Actuelle >= AddDate(Heure_dernier_rappel, #PB_Date_Day, 3)
    MessageRequester("Rappel", "Il est temps de vérifier ta pompe à insuline !")
    Heure_dernier_rappel = Heure_Actuelle
    Sauvegarde_Heure_dernier_changement()
  EndIf
EndProcedure
; Fonction pour calculer la date de changement
Procedure Prochain_changement()
  jour = Val(Mid(GetGadgetText(#Txt_Dernier_Changement), 22, 2))
  mois = Val(Mid(GetGadgetText(#Txt_Dernier_Changement), 25, 2))
  annee = Val(Mid(GetGadgetText(#Txt_Dernier_Changement), 28, 4))
  Date_prochain_changement = FormatDate("%dd/%mm/%yyyy", Date(annee, mois, Jour + 3, 0, 0, 0))
EndProcedure
Procedure Dans()
  Protected Date_Dans = (jour + 3) - Day(Date()) 
  ProcedureReturn Date_Dans
EndProcedure
; Procédure principale
If OpenWindow(#Fenetre_principale, 100, 100, 750, 850, "Changement de réservoir", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(#Txt_Selection, 160, 30, 600, 60, "Sélectionne la date du changement")
  DateGadget(#Dte_changement, 160, 100, 450, 60, FormatDate("%dd/%mm/%yyyy", Date()))
  TextGadget(#Txt_Heure_changement, 190, 200, 540, 60, "Heure du changement (HH:MM)")
  StringGadget(#Str_Heure_changement, 310, 280, 120, 60, "08:30")
  ButtonGadget(#Btn_Enregistrer, 160, 390, 450, 90, "Enregistrer")
  TextGadget(#Txt_Dernier_Changement, 95, 560, 660, 60, "Dernier changement : " + FormatDate("%dd/%mm/%yyyy", Date_dernier_changement))
  Chargement_Heure_dernier_changement()  
  FreeGadget(#Txt_Dernier_Changement)
  TextGadget(#Txt_Dernier_Changement, 95, 560, 660, 60, "Dernier changement : " + FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", Heure_dernier_rappel))
  Prochain_changement() 
  TextGadget(#Txt_Changement_prochain, 150, 660, 570, 60, "Changement le :") 
  SetGadgetText(#Txt_Changement_prochain, "Changement le : " + Date_prochain_changement + " à " + GetGadgetText(#Str_Heure_changement))
  Dans()
  TextGadget(#txt_Dans, 310, 760, 240, 60, "Dans " + Dans() + " jour(s)")
  ; Colorisations
  SetWindowColor(#Fenetre_principale, $AC1A00)
  For i = #Txt_Selection To #txt_Dans
    SetGadgetColor(i, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
    SetGadgetColor(i, #PB_Gadget_FrontColor, $38CEFD)
  Next i  
  Repeat
    Evenement = WaitWindowEvent()    
    Select Evenement         
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Dte_changement
            Date_dernier_changement = GetGadgetState(#Dte_changement)  ; Récupère la date choisie
            SetGadgetText(#Dte_changement, FormatDate("%dd/%mm/%yyyy", Date_dernier_changement))
          Case #Str_Heure_changement
            If GetGadgetText(#Str_Heure_changement) = ""
              SetGadgetText(#Str_Heure_changement, "08:30")
            EndIf  
            Heure_dernier_changement = ConvertirHeure(Date_dernier_changement, GetGadgetText(#Str_Heure_changement))  ; Convertit l’heure saisie
            SetGadgetText(#Txt_Dernier_Changement, FormatDate("%dd/%mm/%yyyy %hh:%ii", Heure_dernier_rappel))            
          Case #Btn_Enregistrer  ; Si on clique sur le bouton "Enregistrer"
            Date_dernier_changement = GetGadgetState(#Dte_changement)  ; Mise à jour forcée
            Heure_dernier_changement = ConvertirHeure(Date_dernier_changement, GetGadgetText(#Str_Heure_changement))  ; Convertit l’heure saisie            
            Heure_dernier_rappel = Heure_dernier_changement  ; Mise à jour
            Sauvegarde_Heure_dernier_changement()            
            SetGadgetText(#Txt_Dernier_Changement, "Dernier changement : " + FormatDate("%dd/%mm/%yyyy %hh:%ii", Heure_dernier_rappel))
            MessageRequester("Confirmation", "Changement enregistré avec succès !")
        EndSelect
    EndSelect    
  Until Evenement = #PB_Event_CloseWindow
EndIf