Savesetting et getsetting dans un fichier ini

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 724 fois - Téléchargée 35 fois

Contenu du snippet

Ce code est à copier dans un Module.
Il remplace les fonctions Vb SaveSetting,GetSetting,GetAllSetting,DeleteSetting
en gardant la même syntaxe. l'appel au anciennes fonction est toujours possible avec la syntaxe Vba.GetSetting , Vba.SaveSetting etc .

Une petite limitation tout de même avec GetAllSettings : la variable qui recevra le tableau devrat être un variant à l'exception de tout autre type y compris untableau

Exemple :

Dim Temp as Variant
Temp = GetAllSettings(App.Title, "General")

Source / Exemple :


Option Explicit

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Sub SaveSetting(AppName As String, Section As String, Key As String, Setting As String)
  Dim lRet As Long
  Dim Path As String
  Path = App.Path
  If Right(Path, 1) <> "\" Then
    Path = Path & "\"
  End If
  lRet = WritePrivateProfileString(Section, Key, Setting, Path & AppName & ".ini")
End Sub
Public Function GetSetting(AppName As String, Section As String, Key As String, Optional Default As String) As String
  Dim lRet As Long
  Dim Path As String
  Dim strTemp As String
  strTemp = Space(32567)
  Path = App.Path
  If Right(Path, 1) <> "\" Then
    Path = Path & "\"
  End If
  lRet = GetPrivateProfileString(Section, Key, Default, strTemp, Len(strTemp), Path & AppName & ".ini")
  lRet = InStr(strTemp, Chr$(0))
  If lRet = 0 Then
    GetSetting = ""
  Else
    GetSetting = Left(strTemp, lRet - 1)
  End If
End Function
Public Function GetAllSettings(AppName As String, Section As String) As Variant
  Dim lRet As Long
  Dim Path As String
  Dim strTemp As String
  Dim Table() As String
  Dim Table2() As String
  Dim iPnt As Integer
  Dim iPnt2 As Integer
  Dim iPosit As Integer
  strTemp = Space(32567)
  Path = App.Path
  If Right(Path, 1) <> "\" Then
    Path = Path & "\"
  End If
  
  lRet = GetPrivateProfileSection(Section, strTemp, Len(strTemp), Path & AppName & ".ini")
  iPnt = 0
  'For Redim+Preserve tables only the las index can be changed
  If Left(strTemp, 2) = Chr$(0) & Chr$(0) Then
    Exit Function
  End If
  Do While Left(strTemp, 1) <> Chr$(0)
    ReDim Preserve Table(1, iPnt)
    iPosit = InStr(strTemp, "=")
    Table(0, iPnt) = Left$(strTemp, iPosit - 1)
    strTemp = Mid$(strTemp, iPosit + 1)
    iPosit = InStr(strTemp, Chr$(0))
    Table(1, iPnt) = Left$(strTemp, iPosit - 1)
    strTemp = Mid$(strTemp, iPosit + 1)
    iPnt = iPnt + 1
  Loop
  ReDim Table2(iPnt - 1, 1)
  For iPnt2 = 0 To iPnt - 1
    Table2(iPnt2, 0) = Table(0, iPnt2)
    Table2(iPnt2, 1) = Table(1, iPnt2)
  Next
  GetAllSettings = Table2
End Function
Public Function DeleteSetting(AppName As String, Section As String, Optional Key As String)
  Dim lRet As Long
  Dim Path As String
  Path = App.Path
  If Right(Path, 1) <> "\" Then
    Path = Path & "\"
  End If
  If Key = "" Then
    lRet = WritePrivateProfileString(Section, vbNullString, vbNullString, Path & AppName & ".ini")
  Else
    lRet = WritePrivateProfileString(Section, Key, vbNullString, Path & AppName & ".ini")
  End If
End Function

Conclusion :


Un fois que vous avez créé le module, il suffit de l'ajouter à un code existant pour que les save/getsetting et tutiquanti de votre projet ecrivent dans un fichier ini plutot que dans Base de registre

J'espère que cela aideras ceux qui comme moi sont nostalgique des fichiers ini

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Et en plus, c'est en .Net, sur le site ;-)
Messages postés
200
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2005

Nono,
Le code est de moi

l'article référencé utilise une classe qui pour être intégrée dans une application, implique une éciture spécifique de code : référencement de la classe. appel des méthodes de la classe, etc .

Mon module permet de prendre un projet existant, on ajoute le module au projet, on recompile.

Ce qui ne retire rien a la qualité de la classe qui me parait tres bien adaptée à sa fonction.

Plusieurs chemins peuvent mener a Rome. c'est pas pour çà que tous les plans sont du même architecte :-)
Messages postés
54
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
10 janvier 2006

Messages postés
5
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
24 janvier 2004

Ben quant à moi, c'est exactement ce qu'il me fallait. J'avais programmé en utilisant SaveSetting et GetSetting sans penser que mon appli n'aurait pas les droits accès à la base de registre une fois installée. Je n'ai eu qu'a créer le module en question et hop le cas était réglé.

Merci beaucoup ;-)
Messages postés
200
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2005

Bravo, c'est élegant, mais je voulais que çà tourne aussi sous vb5 qui n'a pas la fonction split
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.