Code : Tout sélectionner
;/ PureBasic 3.94
;/ Droopy 15/01/06
Structure Pref
Label.s
Key.s
Value.s
LabelId.l
ValueId.l
Type.l
EndStructure
ProcedureDLL PrefInit(IniFile.s,Section.s) ; Initialise the Pref Libraries / Return 1 if the iniFile exist
Shared PrefIniFile.s,PrefSection.s
PrefIniFile=IniFile
PrefSection=Section
Static Flag
If Flag=0
NewList Pref.Pref()
Flag=1
Else
ClearList(Pref())
EndIf
If FileSize(PrefIniFile)>0
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
ProcedureDLL PrefAdd(Label.s,Key.s,Type) ; Add a preference key : type = ( #PB_String_Password | #PB_String_Numeric | #PB_String_LowerCase | #PB_String_UpperCase )
AddElement(Pref())
Pref()\Label=Label
Pref()\Key=Key
Pref()\Type=Type
EndProcedure
ProcedureDLL PrefLoad() ; Load pref from file (ini)
Shared PrefIniFile.s,PrefSection.s
ForEach Pref()
retour.s=Space(512)
GetPrivateProfileString_(@PrefSection,@Pref()\Key,@vide.s,@retour,512,@PrefIniFile)
Pref()\Value=retour
Next
EndProcedure
ProcedureDLL PrefSave() ; Save pref to file (ini)
Shared PrefIniFile.s,PrefSection.s
ForEach Pref()
WritePrivateProfileString_(@PrefSection,@Pref()\Key,@Pref()\Value,@PrefIniFile)
Next
EndProcedure
ProcedureDLL.s PrefGet(Key.s) ; Retrieve a pref value
ForEach Pref()
If Key=Pref()\Key
ProcedureReturn Pref()\Value
EndIf
Next
EndProcedure
ProcedureDLL PrefSet(Key.s,Value.s) ; Set a pref value( Type = #PB_String_Password | #PB_String_Numeric | #PB_String_LowerCase | #PB_String_UpperCase )
ForEach Pref()
If Key=Pref()\Key
Pref()\Value=Value
EndIf
Next
EndProcedure
ProcedureDLL PrefComplete() ; Return 1 if all value are filled
ForEach Pref()
If LTrim(Pref()\Value)=""
ProcedureReturn 0
EndIf
Next
ProcedureReturn 1
EndProcedure
ProcedureDLL PrefShow(Title.s,ButtonText.s,LabelWidth,ValueWidth) ; Show a window to view / modify the memory preference
Shared PrefIniFile.s,PrefSection.s
;/ Création de la fenêtre et calcul de la largeur
Width=LabelWidth+ValueWidth+30
Hwnd=OpenWindow(#PB_Any,0,0,Width,50+CountList(Pref())*30,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,Title)
CreateGadgetList(WindowID(Hwnd))
;/ Ajoute les labels et les Champs de modification
ForEach Pref()
Pref()\LabelId=TextGadget(#PB_Any,10,10+ListIndex(Pref())*30,LabelWidth,20,Pref()\Label)
Pref()\ValueId=StringGadget(#PB_Any,20+LabelWidth,10+ListIndex(Pref())*30,ValueWidth,20,Pref()\Value,Pref()\Type)
Next
;/ Ajoute le bouton
ButtonId=ButtonGadget(#PB_Any,10,40+(CountList(Pref())-1)*30,Width-20,30,ButtonText)
;/ Gestion de évènements
Repeat
event=WaitWindowEvent()
If event=#PB_Event_Gadget And EventGadgetID()=ButtonId And EventType()=#PB_EventType_LeftClick
;/ Clic sur OK --> On enregistre les infos dans la Linked List
ForEach Pref()
Pref()\Value=GetGadgetText(Pref()\ValueId)
Next
event=#PB_Event_CloseWindow ;/ Force à quitter quand clique sur OK
EndIf
Until event=#PB_Event_CloseWindow
;/ On efface tous les gadgets créés
FreeGadget(ButtonId)
ForEach Pref()
FreeGadget(Pref()\LabelId)
FreeGadget(Pref()\ValueId)
Next
CloseWindow(Hwnd)
EndProcedure
;/ Test
Exist=PrefInit("d:\test.ini","pref")
;/ Définit les préférences
PrefAdd("Serveur","Server",0)
PrefAdd("Port","port",#PB_String_Numeric)
PrefAdd("Nom d'utilisateur","UserName",0)
PrefAdd("Mot de passe","Password",#PB_String_Password)
If Exist
;/ Charge les valeurs contenues dans le fichier INI
PrefLoad()
Else
;/ Définit les valeurs par défaut
PrefSet("Server","pop.wanadoo.fr")
PrefSet("port","110")
PrefSet("UserName","descaves")
PrefSet("Password","9841")
EndIf
;/ Affiche et sauve
PrefShow("Configuration","OK",80,100)
PrefSave()
;/ indique si tout les paramètres sont renseignés
If PrefComplete()
MessageRequester("","Complet")
Else
MessageRequester("","Pas complet")
EndIf