je souhaiterais mettre un séparateur entre 2 conteneurs, un pour la liste des éléments enregistrés e un second pour entrer les questions et réponses, donc quand je redimensionne la fenêtre, ça agit sur la dimension de la liste, mais j'aimerais mettre un SplitterGadget pour agir sur la dimension verticale du conteneur question et réponse, mais je ne sais pas comment régler les paramètres bien que l'aide soit bien expliquée, mais comme c'est un gadget que j'utilise peu, je ne le perçoit pas bien.
Si quelqu'un a la solution, je l'en remercierai jamais assez.
Code : Tout sélectionner
;Souviens-toi
Enumeration Fenetre
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Cvs
#Question
#Reponse
#Lst_Elements
#Lst_Question
#Lst_Reponse
#Btn_Modifier_Question
#Btn_Vider_Question
#Btn_Modifier_Reponse
#Btn_Vider_Reponse
#Btn_Maj
#Btn_Nouveau
#Btn_Supprimer
#Btn_Quitter
#Ctn_Liste
#Ctn_QuestRep
#Ctn_Boutons
EndEnumeration
Enumeration Fichiers
#FichierJSON
EndEnumeration
Enumeration Polices
#Police
#Police2
EndEnumeration
Structure Element
Question.s ;Question
Reponse.s ;Réponse à mémoriser
EndStructure
Global NewList Elements.Element(), Evenement, Fichier.s = "D:\Programmation\Donnees\Souviens-toi.Json"
Declare Charger_Elements()
Declare GestionEvenements()
Declare Nouvel_Element()
Declare Selection_Element()
Declare Supprimer_Element()
Declare Maj_Element()
Declare Sauvegarder_Elements()
Declare Fenetre_Modification()
Declare Fenetre_principale()
UsePNGImageDecoder()
LoadFont(#Police, "Arial", 25, #PB_Font_Bold)
LoadFont(#Police2, "Arial", 15)
;Chargement des éléments existants
Procedure Charger_Elements()
If ReadFile(#FichierJSON, Fichier)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, Fichier, #PB_JSON_NoCase)
;Extraction de le chaîne JSON vers la liste chaînée Elements
ExtractJSONList(JSONValue(#FichierJSON), Elements())
;Affichage de la liste des éléments
ForEach Elements()
With Elements()
AddGadgetItem(#Lst_Elements, -1, \Question + #LF$ + Space(Len(\Reponse)))
SetGadgetItemData(#Lst_Elements, CountGadgetItems(#Lst_Elements) - 1, ListIndex(Elements()))
EndWith
Next
EndIf
EndProcedure
Procedure GestionEvenements()
Protected Evenement = EventType()
Select Evenement
Case #PB_EventType_Change
If Trim(GetGadgetText(#Question)) <> ""
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
Else
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
EndIf
EndSelect
EndProcedure
;Nouvel élément (raz des champs)
Procedure Nouvel_Element()
SetWindowData(#Fenetre_principale, 0) ;C'est une création
SetGadgetText(#Question, "")
SetGadgetText(#Reponse, "")
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
DisableGadget(#Btn_Supprimer, #True)
SetGadgetText(#Btn_Maj, "Ajouter")
SetActiveGadget(#Question)
EndProcedure
;Une question est sélectionnée dans la liste
Procedure Selection_Element()
Protected Item = GetGadgetState(#Lst_Elements)
If Item <> -1
SelectElement(Elements(), GetGadgetItemData(#Lst_Elements, Item))
With Elements()
SetGadgetText(#Question, \Question)
SetGadgetText(#Reponse, \Reponse)
EndWith
EndIf
;C'est une modif
SetWindowData(#Fenetre_principale, 1)
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
DisableGadget(#Btn_Supprimer, #False)
SetGadgetText(#Btn_Maj, "Modifier")
SetActiveGadget(#Question)
EndProcedure
;Suppression d'une question
Procedure Supprimer_Element()
If MessageRequester("Information", "Etes vous sûr de supprimer une question ?" + #CRLF$ + "cette action est irrémédiable !", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
Maj_Element()
EndIf
EndProcedure
Procedure Maj_Element()
;Protected.s Etiquette = GetGadgetText(#Etiquette)
Protected.s Question = GetGadgetText(#Question)
Protected.s Reponse = GetGadgetText(#Reponse)
Select GetWindowData(#Fenetre_principale)
Case 0 ; Création
AddElement(Elements())
With Elements()
\Question = Question
\Reponse = Reponse
AddGadgetItem(#Lst_Elements, -1, \Question + #LF$ + \Reponse)
SetGadgetItemData(#Lst_Elements, CountGadgetItems(#Lst_Elements) - 1, ListIndex(Elements()))
EndWith
Case 1 ;Modif
With Elements()
\Question = Question
\Reponse = Reponse
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Question, 0)
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Reponse, 1)
EndWith
Nouvel_Element()
Case 3 ;Suppression
RemoveGadgetItem(#Lst_Elements, ListIndex(Elements()))
DeleteElement(Elements())
;Mise à jour de liaison ListIconGadget <-> Elements()
ForEach Elements()
SetGadgetItemData(#Lst_Elements, ListIndex(Elements()), ListIndex(Elements()))
Next
EndSelect
EndProcedure
;Sauvegarde automatique à la fermeture de l(application
Procedure Sauvegarder_Elements()
;Création d'un objet JSON
CreateJSON(#FichierJSON)
;insertion de la liste chaînée "Elements()" dans l'objet
InsertJSONList(JSONValue(#FichierJSON), Elements())
;sauvegarde du fichier
SaveJSON(#FichierJSON, Fichier, #PB_JSON_PrettyPrint)
;Libérer les données
FreeJSON(#FichierJSON)
;Libérer la liste
FreeList(Elements())
EndProcedure
Procedure Quitter()
CloseWindow(#Fenetre_principale)
Sauvegarder_Elements()
End
EndProcedure
;Redimensionnement des questions
Procedure Redimensionner()
If WindowHeight(#Fenetre_principale) > 180
ResizeGadget(#cvs, #PB_Ignore, #PB_Ignore, WindowWidth(#Fenetre_principale), WindowHeight(#Fenetre_principale))
ResizeGadget(#Ctn_Liste, (WindowWidth(#Fenetre_principale)-GadgetWidth(#Lst_Elements))/2, #PB_Ignore, #PB_Ignore, WindowHeight(#Fenetre_principale) - 390)
ResizeGadget(#Lst_Elements, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetHeight(#Ctn_Liste) - 25)
ResizeGadget(#Ctn_QuestRep, #PB_Ignore, WindowHeight(#Fenetre_principale) - 390, WindowWidth(#Fenetre_principale), #PB_Ignore)
ResizeGadget(#Question, #PB_Ignore, #PB_Ignore, (GadgetWidth(#Ctn_QuestRep)/2)-15, #PB_Ignore)
ResizeGadget(#Reponse, GadgetWidth(#Ctn_QuestRep)/2, #PB_Ignore, (GadgetWidth(#Ctn_QuestRep)/2)-15, #PB_Ignore)
ResizeGadget(#Ctn_Boutons, #PB_Ignore, WindowHeight(#Fenetre_principale) - 90, WindowWidth(#Fenetre_principale), #PB_Ignore)
ResizeGadget(#Btn_Quitter, GadgetWidth(#Ctn_Boutons) - GadgetWidth(#Btn_Quitter) - 10, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Btn_Supprimer, (GadgetWidth(#Ctn_Boutons) * 0.75) - GadgetWidth(#Btn_Supprimer) - 10, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Btn_Nouveau, (GadgetWidth(#Ctn_Boutons) * 0.45) - GadgetWidth(#Btn_Nouveau) - 10, #PB_Ignore, #PB_Ignore, #PB_Ignore)
;Debug GadgetWidth(#Ctn_Boutons)
EndIf
EndProcedure
Procedure Fenetre_principale()
If OpenWindow(#Fenetre_principale, 0, 0, 1270, 815, "Souviens-Toi", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
WindowBounds(#Fenetre_principale, 1270, 460, #PB_Ignore, #PB_Ignore)
CanvasGadget(#Cvs, 0, 0, 1270, 815, #PB_Canvas_Image|#PB_Canvas_Container)
SetGadgetFont(#PB_Default, FontID(#Police))
ContainerGadget(#Ctn_Liste, 310, 0, 650, 425, #PB_Container_Raised)
ListIconGadget(#Lst_Elements, 10, 10, 625, 400, "Enoncé", 620, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#LVS_NOCOLUMNHEADER)
CloseGadgetList()
ContainerGadget(#Ctn_QuestRep, 0, 425, 1270, 300, #PB_Container_Raised)
EditorGadget(#Question, 10, 10, 620, 275, #PB_Editor_WordWrap)
EditorGadget(#Reponse, 635, 10, 620, 275, #PB_Editor_WordWrap)
CloseGadgetList()
ContainerGadget(#Ctn_Boutons, 0, 725, 1270, 90)
ButtonGadget(#Btn_Maj, 10, 30, 185, 40, "Ajouter")
ButtonGadget(#Btn_Nouveau, 365, 30, 185, 40, "Nouveau")
ButtonGadget(#Btn_Supprimer, 720, 30, 185, 40, "Supprimer")
ButtonGadget(#Btn_Quitter, 1075, 30, 185, 40, "Quitter")
CloseGadgetList()
CloseGadgetList()
SetGadgetFont(#Lst_Elements, FontID(#Police2))
SetWindowColor(#Fenetre_principale, $EFC8C7)
SetGadgetColor(#Ctn_Liste, #PB_Gadget_BackColor, $7EC821)
SetGadgetColor(#Ctn_QuestRep, #PB_Gadget_BackColor, GetGadgetColor(#Ctn_Liste, #PB_Gadget_BackColor))
SetGadgetColor(#Ctn_Boutons, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
;Contrôle de la saisie
BindGadgetEvent(#Question, @GestionEvenements())
;Mise en place d'une nouvelle question
BindGadgetEvent(#Btn_Nouveau, @Nouvel_Element())
;Une question est sélectionnée
BindGadgetEvent(#Lst_Elements, @Selection_Element())
;Ajout ou modification d'une question
BindGadgetEvent(#Btn_Maj, @Maj_Element())
;Suppression d'une question
BindGadgetEvent(#Btn_Supprimer, @Supprimer_Element())
;Fermeture de l'application et sauvegarde automatique
BindGadgetEvent(#Btn_Quitter, @Quitter())
BindEvent(#PB_Event_SizeWindow, @Redimensionner())
Charger_Elements()
EndIf
EndProcedure
Fenetre_principale()
;- Boucle
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
;Fermeture de l'application avec sauvegarde automatique
Select EventWindow()
Case #Fenetre_principale
CloseWindow(#Fenetre_principale)
Sauvegarder_Elements()
Break
EndSelect
EndSelect
ForEver