[Résolu] Créer une liste de mots de passe non lisibles
Publié : ven. 09/déc./2016 16:10
Bonjour à tous,
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:
Je vous remercie par anticipation de votre aide gracieuse qui me ser profitable.
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