Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SAVESETTING ET GETSETTING DANS UN FICHIER INI


Information sur la source

Catégorie :Modules Niveau : Expert Date de création : 20/06/2003 Date de mise à jour : 20/06/2003 23:26:31 Vu : 6 623

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

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

  • 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
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
 

Commentaires et avis

signaler à un administrateur
Commentaire de Tilois le 21/06/2003 09:04:16

moi j'aimais bien mes petites fonctions de base en API
toi tu compliques trop la chose je trouve :-

signaler à un administrateur
Commentaire de Delbeke le 21/06/2003 09:21:57

Oui peut être. L'avantage est que tu prends un projet qui utilise des savesetting/get setting , tu lui incorpores le module et tu ne changes rien d'autre. Le nouveau projet utilise maintenant un fichier ini au lieu de la base de registre

signaler à un administrateur
Commentaire de Delbeke le 21/06/2003 09:22:29

Oui peut être. L'avantage est que tu prends un projet qui utilise des savesetting/get setting , tu lui incorpores le module et tu ne changes rien d'autre. Le nouveau projet utilise maintenant un fichier ini au lieu de la base de registre

signaler à un administrateur
Commentaire de EBArtSoft le 21/06/2003 11:14:24 administrateur CS

Bien jouer !

par contre tu complique un peu c vrais tu pourais deja creer une fonction commune par exemple pour recuperer le path de l'appli tu gagnera de la clareté...

b@nne prog

signaler à un administrateur
Commentaire de EBArtSoft le 21/06/2003 11:18:30 administrateur CS

Ah au fait ... tu a oublié les valeur par default !
c important lorsque tu demande une valeur au registre qui n'exsite pas, par exemple :

ServerIP = GetSettings(app.title,"Settings","ServerIP","127.0.0.1")

si dans le cas present la valeur 127.0.0.1 n'est pas renvoyer
(imaginons) si le fichier ini a été supprimer mon prog plante !

@+

signaler à un administrateur
Commentaire de Delbeke le 21/06/2003 11:58:06

La valeur par défault existe aussi comme dans le getsetting d'origine

signaler à un administrateur
Commentaire de max12 le 22/06/2003 05:11:23 administrateur CS

Très utile :D

signaler à un administrateur
Commentaire de Renfield le 23/06/2003 00:20:27 administrateur CS

Fidèle a toi même, le code mis en oeuvre est souvent trop complexe pour le résultat......

Public Function GetSetting(AppName As String, Section As String, Key As String, Optional Default As String) As String
    Dim Path As String
    Dim strTemp As String * 32768

    Path = App.Path
    If Right$(Path, 1) &lt;&gt; "" Then Path = Path & ""
    
    Call GetPrivateProfileString(Section, Key, Default, strTemp, Len(strTemp), Path & AppName & ".ini")
    GetSetting = Split(strTemp, vbNullChar)(0)
End Function

saluons au passage l'arrivée d'un nouveau multiple de 4 :  32567

ceci dit, l'idée n'est pas mauvaise.........

signaler à un administrateur
Commentaire de Delbeke le 23/06/2003 07:21:05

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

signaler à un administrateur
Commentaire de albertus le 24/01/2004 14:51:29

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 ;-)

signaler à un administrateur
Commentaire de cybermax62 le 08/09/2004 12:24:12

c beau mais c copié...
bouh !

http://www.developer.com/net/vb/article.php/3287991

signaler à un administrateur
Commentaire de Delbeke le 08/09/2004 17:22:00

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 :-)

signaler à un administrateur
Commentaire de Renfield le 09/09/2004 08:32:44 administrateur CS

Et en plus, c'est en .Net, sur le site ;-)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.