Je souhaite créer une liste de mes mots de passe, mais je voudrais que les lettres des mots de passe soient remplacées par "*", mais que quand on sélectionne une ligne, il s'affiche dans un StringGadget prévu à cet effet.
Voici mon code:
Code : Tout sélectionner
;Gestion des sites
Enumeration
#FichierJSON
EndEnumeration
Enumeration
#Fenetre_principale
EndEnumeration
Enumeration
#Txt_Site
#Str_Site
#Txt_Site_Utilisateur
#Str_Nom_Utilisateur
#Txt_Mdp
#Str_Mdp
#Liste_sites
#Btn_Nouveau
#Btn_Maj
#Btn_Supprimer
EndEnumeration
Enumeration
#Police
EndEnumeration
Structure Liste
Titre.s
Largeur.i
EndStructure
;Structure d'un site
Structure Site
Site.s
Nom_Utilisateur.s
Mdp.s
EndStructure
;Création d'une liste vierge pour les sites
Global NewList Sites.Site()
Global$ FichierJson = "D:\Programmation\Donnees\Sites.json"
Global Evenement
Declare Ouvrir_Fenetre_principale()
Declare Redimensionner()
Declare Charger_Sites()
Declare GestionEvenements()
Declare NouveauSite()
Declare SelectionSite()
Declare MajSite()
Declare SupprimerSite()
Declare SauvegardeSites()
LoadFont(#Police, "Microsoft Sans Serif", 12, #PB_Font_Bold)
Ouvrir_Fenetre_principale()
Macro TrierListeStruc(_NomListe_, _Options_, _Champ_Structure_)
; Cette macro simplifie l'utilisation de la fonction intégrée SortStructuredList().
SortStructuredList(_NomListe_, _Options_, OffsetOf(_Champ_Structure_), TypeOf(_Champ_Structure_))
EndMacro
Procedure Redimensionner()
ResizeGadget(#Btn_Nouveau, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Btn_Maj, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Btn_Supprimer, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Liste_sites, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(#Fenetre_principale)-110)
;Debug WindowHeight(#Fenetre_principale)
EndProcedure
Procedure Ouvrir_Fenetre_principale()
If OpenWindow(#Fenetre_principale, 402, 356, 940, 340, "Mes sites", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetGadgetFont(#PB_Default, FontID(#Police))
TextGadget(#Txt_Site, 20, 0, 300, 24, "Site")
TextGadget(#Txt_Site_Utilisateur, 320, 0, 300, 24, "Nom d'utilisateur", #PB_Text_Center)
TextGadget(#Txt_Mdp, 620, 0, 300, 24, "Mot de passe")
StringGadget(#Str_Site, 20, 25, 300, 24, "")
StringGadget(#Str_Nom_Utilisateur, 320, 25, 300, 24, "")
StringGadget(#Str_Mdp, 620, 25, 300, 24, "")
ListIconGadget(#Liste_sites, 20, 55, 900, 250, "Site", 300, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#Liste_sites, 1, "Nom d'utilisateur", 300)
AddGadgetColumn(#Liste_sites, 2, "Mot de passe", 300)
ButtonGadget(#Btn_Nouveau, 20, 310, 80, 24, "Nouveau")
ButtonGadget(#Btn_Maj, 130, 310, 80, 24, "Ajouter")
ButtonGadget(#Btn_Supprimer, 235, 310, 90, 24, "Supprimer")
;Lecture des sites
Charger_Sites()
;L'application est prête pour la saisie d'un site
NouveauSite()
EndIf
EndProcedure
;Chargement des praticiens existants
Procedure Charger_Sites()
If ReadFile(#FichierJSON, FichierJson)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, FichierJson, #PB_JSON_NoCase)
;Extraction de la chaine JSON vers la liste chainée praticiens
ExtractJSONList(JSONValue(#FichierJSON), Sites())
TrierListeStruc(Sites(), #PB_Sort_Ascending, Site\Site)
;Affichage de la liste des sites
ForEach(Sites())
With Sites()
AddGadgetItem(#Liste_sites, -1, \Site + #LF$ + \Nom_Utilisateur + #LF$ + \Mdp)
SetGadgetItemData(#Liste_sites, CountGadgetItems(#Liste_sites)-1, ListIndex(Sites()))
EndWith
Next
Else
MessageRequester("ATTENTION", "Le fichier " + FichierJson + ", n'existe pas" + #CRLF$ + #CRLF$ + "Veuillez le créer", #PB_MessageRequester_Info)
EndIf
EndProcedure
;Gestionnaire de contrôle de la saisie
Procedure GestionEvenements()
Protected Evenement = EventType()
Select Evenement
Case #PB_EventType_Change
If Trim(GetGadgetText(#Str_Site)) <> ""
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
Else
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
EndIf
EndSelect
EndProcedure
;Nouveau site (Remise à zéro des champs de saisie)
Procedure NouveauSite()
SetWindowData(#Fenetre_principale, 0) ;C'est une création
SetGadgetText(#Str_Site, "")
SetGadgetText(#Str_Nom_Utilisateur, "")
SetGadgetText(#Str_Mdp, "")
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
DisableGadget(#Btn_Supprimer, #True)
SetGadgetText(#Btn_Maj, "Ajouter")
SetActiveGadget(#Str_Site)
EndProcedure
;Un site est sélectionné dans la liste
Procedure SelectionSite()
Protected Item = GetGadgetState(#Liste_sites)
If Item <> -1
SelectElement(Sites(), GetGadgetItemData(#Liste_sites, Item))
With Sites()
SetGadgetText(#Str_Site, \Site)
SetGadgetText(#Str_Nom_Utilisateur, \Nom_Utilisateur)
SetGadgetText(#Str_Mdp, \Mdp)
EndWith
EndIf
;C'est une modification de site
SetWindowData(#Fenetre_principale, 1)
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
DisableGadget(#Btn_Supprimer, #False)
SetGadgetText(#Btn_Maj, "Modifier")
SetActiveGadget(#Str_Site)
EndProcedure
;Suppression d'un site
Procedure SupprimerSite()
If MessageRequester("Information", "Etes vous sûr de supprimer un site ?" + #CRLF$ + "cette action est irrémédiable !", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
MajSite()
EndIf
EndProcedure
;Gestionnaire de mise à jour des sites
Procedure MajSite()
Protected.s Site = GetGadgetText(#Str_Site)
Protected.s Nom_Utilisateur = GetGadgetText(#Str_Nom_Utilisateur)
Protected.s Mdp = GetGadgetText(#Str_Mdp)
Select GetWindowData(#Fenetre_principale)
Case 0 ;Création d'un Site
AddElement(Sites())
With Sites()
\Site = Site
\Nom_Utilisateur = Nom_Utilisateur
\Mdp = Mdp
AddGadgetItem(#Liste_sites, -1, \Site + #LF$ + \Nom_Utilisateur + #LF$ + \Mdp)
SetGadgetItemData(#Liste_sites, CountGadgetItems(#Liste_sites)-1, ListIndex(Sites()))
EndWith
Case 1 ;Modification d'un site
With Sites()
\Site = Site
\Nom_Utilisateur = Nom_Utilisateur
\Mdp = Mdp
SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Site, 0)
SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Nom_Utilisateur, 1)
SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Mdp, 2)
EndWith
NouveauSite()
Case 3 ;Suppression d'un site
RemoveGadgetItem(#Liste_sites, ListIndex(Sites()))
DeleteElement(Sites())
;Mise à jour des index de liaison ListIconGadget <-> Sites()
ForEach(Sites())
SetGadgetItemData(#Liste_sites, ListIndex(Sites()), ListIndex(Sites()))
Next
EndSelect
EndProcedure
;Sauvegarde automatique des sites à la fermeture de l'application
Procedure SauvegardeSites()
;Création d'un objet JSON
CreateJSON(#FichierJSON)
;Insertion de la liste chainée "Sites" dans l'objet JSON
InsertJSONList(JSONValue(#FichierJSON), Sites())
;Sauvegarde du fichier
SaveJSON(#FichierJSON, FichierJson, #PB_JSON_PrettyPrint)
EndProcedure
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Str_Site
;Contrôle de la saisie (Le nom du site est obligatoire)
GestionEvenements()
Case #Liste_sites
;Un site est selectionné dans la liste
SelectionSite()
Case #Btn_Nouveau
;Mise en place d'un nouveau site
NouveauSite()
Case #Btn_Maj
;Ajout ou modification d'un site
MajSite()
Case #Btn_Supprimer
;Supression d'un site
SupprimerSite()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_principale
;Fermeture de l'application et sauvegarde des sites
SauvegardeSites()
CloseWindow(#Fenetre_principale)
Break
EndSelect
EndSelect
ForEver