je souhaite faire un logiciel pour prendre des rendez-vous, car je fréquente beaucoup le corps médical et j'aimerais savoir pourquoi, il ne sauvegarde pas alors qu'il est sensé le faire à la fermeture du programme.
Code : Tout sélectionner
;Planning Json.pb
EnableExplicit
;{- Enumérations / DataSections
Enumeration Fenetres
#Fenetre_principale
#Base_de_donnees
EndEnumeration
Enumeration Gadgets
#LstIcn
#Dte_Quand
#Txt_Qui
#Txt_AvecQui
#Txt_Ville
#Txt_Heure
#Txt_Duree
#Txt_Note
#Str_Qui
#Str_AvecQui
#Str_Ville
#Str_Heure
#Str_Duree
#Edt_Note
#Btn_Nouveau
#Btn_Enregistrer
#Btn_Supprimer
#Btn_Selectionner
#Btn_Quitter
#Ctn
EndEnumeration
;}
Structure DB
Quand.s
Qui.s
Avec_Qui.s
Ou.s
Heure.s
Duree.s
Note.s
EndStructure
Global NewList MaBase.DB()
Global Evenement, EvenementFenetre, EvenementGadget, TypeEvenement, EvenementMenu
;Application
#TitreApplication = "Planning par Micoute"
;Base de données
#Fichier_de_donnees = "D:\Programmation\Donnees\Planning.Json"
; Déclaration des variables
Global.s Date_Quand, Qui, AvecQui, Ville, Heure, Duree, Note
Global Texte$, Couleur, Couleur2, Couleur3, Resultat, ElemGadget
Declare Event_SizeWindow()
Declare ChargerRDV()
Declare NouveauRDV()
Declare SelectionnerRDV()
Declare SupprimerRDV()
Declare Mise_a_jour_RDV()
Declare ModifierEnregistrement()
Declare SauvegardeRDV()
Declare Ouvrir_Fenetre_principale()
Procedure Event_SizeWindow()
ResizeGadget(#LstIcn, #PB_Ignore, #PB_Ignore, WindowWidth(#Fenetre_principale) - 20, WindowHeight(#Fenetre_principale) - 305)
ResizeGadget(#Ctn, #PB_Ignore, GadgetY(#LstIcn) + GadgetHeight(#LstIcn), WindowWidth(#Fenetre_principale), WindowHeight(#Fenetre_principale) - 20)
ResizeGadget(#Str_Qui, 80, 10, GadgetWidth(#Ctn) -100, 20)
ResizeGadget(#Str_AvecQui,0, 10, GadgetWidth(#Ctn) -100, 20)
ResizeGadget(#Str_AvecQui, 80, 45, GadgetWidth(#Ctn) - 100, 20)
ResizeGadget(#Str_Ville, 80, 75, GadgetWidth(#Ctn) - 100, 20)
ResizeGadget(#Edt_Note, 80, 170, GadgetWidth(#Ctn) - 100, 40)
ResizeGadget(#Btn_Enregistrer, (GadgetWidth(#Ctn) * 0.3)-15, 225, 60, 20)
ResizeGadget(#Btn_Supprimer, (GadgetWidth(#Ctn) * 0.5)-15 , 225, 60, 20)
ResizeGadget(#Btn_Selectionner, (GadgetWidth(#Ctn) * 0.7)-15 , 225, 60, 20)
ResizeGadget(#Btn_Quitter, GadgetWidth(#Ctn) - 60, 225, 40, 20)
EndProcedure
;Ouverture de la base de données
Procedure ChargerRDV()
If ReadFile(#Base_de_donnees, #Fichier_de_donnees)
CloseFile(#Base_de_donnees)
;Analyser les données JSON à partir d'un fichier
LoadJSON(#Base_de_donnees, #Fichier_de_donnees)
;Extraire les éléments dans la liste spécifiée
ExtractJSONList(JSONValue(#Base_de_donnees), MaBase())
;Affichage de la liste des Renvez-vous
ForEach MaBase()
With MaBase()
AddGadgetItem(#LstIcn, -1, \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
SetGadgetItemData(#LstIcn, CountGadgetItems(#LstIcn) - 1, ListIndex(MaBase()))
EndWith
Next
EndIf
EndProcedure
;Mise en place d'un nouvel enregistrement
Procedure NouveauRDV()
SetWindowData(#Fenetre_principale, 0) ;C'est une création
SetGadgetState(#Dte_Quand, Date())
SetGadgetText(#Str_Qui, "")
SetGadgetText(#Str_AvecQui, "")
SetGadgetText(#Str_Ville, "")
SetGadgetText(#Str_Heure, "")
SetGadgetText(#Str_Duree, "")
SetGadgetText(#Edt_Note, "")
EndProcedure
Procedure SelectionnerRDV()
Protected Element = GetGadgetState(#LstIcn)
If Element <> -1
SelectElement(MaBase(), GetGadgetItemData(#LstIcn, Element))
With MaBase()
SetGadgetText(#Dte_Quand, \Quand)
SetGadgetText(#Str_Qui, \Qui)
SetGadgetText(#Str_AvecQui, \Avec_Qui)
SetGadgetText(#Str_Ville, \Ou)
SetGadgetText(#Str_Heure, \Heure)
SetGadgetText(#Str_Duree, \Duree)
SetGadgetText(#Edt_Note, \Note)
EndWith
EndIf
;C'est une modification de RDV
SetWindowData(#Fenetre_principale, 1)
EndProcedure
;Suppression d'un enregistrement
Procedure SupprimerRDV()
If MessageRequester("Information", "Etes-vous certain de vouloir supprimer ce RDV ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
Mise_a_jour_RDV()
EndIf
EndProcedure
;Mise à jour des rendez-vous
Procedure Mise_a_jour_RDV()
Date_Quand = Str(GetGadgetState(#Dte_Quand))
Qui = GetGadgetText(#Str_Qui)
AvecQui = GetGadgetText(#Str_AvecQui)
Ville = GetGadgetText(#Str_Ville)
Heure = GetGadgetText(#Str_Heure)
Duree = GetGadgetText(#Str_Duree)
Note = GetGadgetText(#Edt_Note)
Select GetWindowData(#Fenetre_principale)
Case 0 ;Création d'un RDV
AddElement(MaBase())
With MaBase()
\Quand = Date_Quand
\Qui = qui
\Avec_Qui = AvecQui
\Ou = Ville
\Heure = Heure
\Duree = Duree
\Note = Note
AddGadgetItem(#LstIcn, ListIndex(MaBase()), \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
EndWith
Case 1 ;Modification d'un contact
With MaBase()
\Quand = Date_Quand
\Qui = qui
\Avec_Qui = AvecQui
\Ou = Ville
\Heure = Heure
\Duree = Duree
\Note = Note
AddGadgetItem(#LstIcn, ListIndex(MaBase()), \Quand + #LF$ + \Qui + #LF$ + \Avec_Qui + #LF$ + \Ou + #LF$ + \Heure + #LF$ + \Duree + #LF$ + \Note)
EndWith
NouveauRDV()
Case 3 ;Suppression d'un RDV
RemoveGadgetItem(#LstIcn, ListIndex(MaBase()))
DeleteElement(MaBase())
;Mise à jour des index ListIcon <-> MaBase()
ForEach MaBase()
SetGadgetItemData(#LstIcn, ListIndex(MaBase()), ListIndex(MaBase()))
Next
EndSelect
EndProcedure
;Sauvegarde des rendez-vous à la fermeture de l'application
Procedure SauvegardeRDV()
;Création d'un fichier JSON
CreateJSON(#Base_de_donnees)
;Insertion de la liste chaînée "MaBase" dans le fichier JSON
InsertJSONList(JSONValue(#Base_de_donnees), MaBase())
;Sauvegarde du fichier
SaveJSON(#Base_de_donnees, #Fichier_de_donnees)
EndProcedure
Procedure Ouvrir_Fenetre_principale()
If OpenWindow(#Fenetre_principale, 0, 0, 500, 560, #TitreApplication + " © 31 mars 2016", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
ListIconGadget(#LstIcn, 10, 40, 475, 255, "Quand", 80, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#LstIcn, 1, "Qui", 100)
AddGadgetColumn(#LstIcn, 2, "Avec qui", 100)
AddGadgetColumn(#LstIcn, 3, "Où", 100)
AddGadgetColumn(#LstIcn, 4, "Heure", 45)
AddGadgetColumn(#LstIcn, 5, "Durée", 45)
AddGadgetColumn(#LstIcn, 6, "Note", 350)
DateGadget(#Dte_Quand, 10, 10, 80, 20, "%dd/%mm/%yyyy", Date())
ContainerGadget(#Ctn, 10, 300, 480, 245)
TextGadget(#Txt_Qui, 0, 10, 20, 20, "Qui:", #PB_Text_Right)
TextGadget(#Txt_AvecQui, 0, 50, 50, 20, "Avec qui:", #PB_Text_Right)
TextGadget(#Txt_Ville, 0, 80, 75, 20, "Endroit ou Ville", #PB_Text_Right)
TextGadget(#Txt_Heure, 0, 115, 35, 20, "Heure:", #PB_Text_Right)
TextGadget(#Txt_Duree, 0, 145, 35, 20, "Durée:", #PB_Text_Right)
TextGadget(#Txt_Note, 0, 185, 30, 20, "Note:", #PB_Text_Right)
StringGadget(#Str_Qui, 80, 10, 395, 20, "")
StringGadget(#Str_AvecQui, 80, 45, 395, 20, "")
StringGadget(#Str_Ville, 80, 75, 396, 20, "")
StringGadget(#Str_Heure, 80, 110, 35, 20, "")
StringGadget(#Str_Duree, 80, 140, 35, 20, "")
EditorGadget(#Edt_Note, 80, 170, GadgetWidth(#Ctn) - 85, 40) ;395, 40)
ButtonGadget(#Btn_Nouveau, 0, 225, 50, 20, "Nouveau")
ButtonGadget(#Btn_Enregistrer, 100, 225, 60, 20, "Enregistrer")
ButtonGadget(#Btn_Supprimer, 220, 225, 55, 20, "Supprimer")
ButtonGadget(#Btn_Selectionner, 321, 225, 63, 20, "Sélectionner")
ButtonGadget(#Btn_Quitter, 435, 225, 40, 20, "Quitter")
CloseGadgetList()
Couleur = $EAFAEA
SetWindowColor(#Fenetre_principale, Couleur)
SetGadgetColor(#Txt_Qui, #PB_Gadget_BackColor, Couleur)
SetGadgetColor(#Txt_AvecQui, #PB_Gadget_BackColor, Couleur)
SetGadgetColor(#Txt_Ville, #PB_Gadget_BackColor, Couleur)
SetGadgetColor(#Txt_Heure, #PB_Gadget_BackColor, Couleur)
SetGadgetColor(#Txt_Duree, #PB_Gadget_BackColor, Couleur)
SetGadgetColor(#Txt_Note, #PB_Gadget_BackColor, Couleur)
couleur2 = $EAEAFA
SetGadgetColor(#Str_Qui, #PB_Gadget_BackColor, couleur2)
SetGadgetColor(#Str_AvecQui, #PB_Gadget_BackColor, couleur2)
SetGadgetColor(#Str_Ville, #PB_Gadget_BackColor, couleur2)
SetGadgetColor(#Str_Heure, #PB_Gadget_BackColor, couleur2)
SetGadgetColor(#Str_Duree, #PB_Gadget_BackColor, couleur2)
SetGadgetColor(#Edt_Note, #PB_Gadget_BackColor, couleur2)
couleur3 = $FAEAEA
SetGadgetColor(#LstIcn, #PB_Gadget_BackColor, couleur3)
BindEvent( #PB_Event_SizeWindow, @Event_SizeWindow() )
EndIf
EndProcedure
;Lancer la procédure principale
Ouvrir_Fenetre_principale()
;Ouverture de la base de données
ChargerRDV()
;{- Boucle événementielle
Repeat
Evenement = WaitWindowEvent()
Select Evenement
; ///////////////////
Case #PB_Event_Gadget
EvenementGadget = EventGadget()
TypeEvenement = EventType()
If EvenementGadget = #LstIcn
; VoirEnregistrement()
ElseIf EvenementGadget = #Btn_Nouveau ;Nouveau Rdv
NouveauRDV()
ElseIf EvenementGadget = #Btn_Enregistrer ;Ajout ou modification d'un Rdv
Mise_a_jour_RDV()
ElseIf EvenementGadget = #Btn_Supprimer ; Suppression d'un Rdv
SupprimerRDV()
ElseIf EvenementGadget = #Btn_Selectionner
SelectionnerRDV()
ElseIf EvenementGadget = #Btn_Quitter
CloseWindow(#Fenetre_principale)
Break
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EvenementFenetre = EventWindow()
If EvenementFenetre = #Fenetre_principale
CloseWindow(#Fenetre_principale)
SauvegardeRDV()
Break
EndIf
EndSelect
ForEver
;}