VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "CINI"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
Option Explicit

'taille maxi d'un nom de fichier
Private Const MAX_PATH As Long = 260&

'remplace (ou crée) la section lpApplicationName complète d'un fichier INI (supprime si lpString est NULL)
Private Declare Function WritePrivateProfileSection Lib "kernel32.dll" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
'remplace (ou crée) la valeur de la clé lpKeyName d'une section lpApplicationName par lpString
Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'lit une section lpApplicationName complète
Private Declare Function GetPrivateProfileSection Lib "kernel32.dll" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'lit une liste des noms de sections séparés par des vbNullChar et terminée par deux vbNullChar
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'lit la valeur d'une clé lpKeyName d'une section lpApplicationName dans lpString
Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

'variables locales de stockage des valeurs de propriétés
Private mvarFileName As String 'copie locale

'==================================================
'propriétés
'==================================================

'définit ou renvoie le nom du fichier INI géré par l'objet
Public Property Let FileName(ByVal vData As String)
Attribute FileName.VB_HelpID = 398
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.FileName = 5
    mvarFileName = vData
End Property
Public Property Get FileName() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.FileName
    FileName = mvarFileName
End Property

'==================================================
'méthodes publiques
'==================================================

'indique si la section szSectionName existe
'==========================================
'szSectionName : nom de la section dont on veut tester l'existence
'renvoie True si la section existe, Flase sinon
Public Function IsSectionPresent(ByVal szSectionName As String) As Boolean
Dim buff As String

buff = Space(MAX_PATH)
GetPrivateProfileSectionNames buff, MAX_PATH, mvarFileName

IsSectionPresent = (InStr(buff, szSectionName) > 0)
End Function

'écrit la valeur szValue dans la clé szKeyName de la section szSectionName
'==============================================
'szSectionName : nom de la section dans laquelle se trouve la clé szKeyName
'szKeyName     : nom de la clé qui contiendra la valeur szValue
'szValue       : valeur à inscrire pour la clé szKeyName de la section szSectionName
'renvoie 0 en cas d'erreur, pas zéro sinon
Public Function SetValue(ByVal szSectionName As String, szKeyName As String, szValue As String) As Long
SetValue = WritePrivateProfileString(szSectionName, szKeyName, szValue, mvarFileName)
End Function

'lit la valeur de la clé szKeyName de la section szSectionName
'==============================================
'szSectionName : nom de la section dans laquelle se trouve la clé szKeyName
'szKeyName     : nom de la clé qui contient la valeur recherchée
'renvoie la valeur ou une chaine vide en cas d'erreur
Public Function GetValue(ByVal szSectionName As String, szKeyName As String) As String
Dim l As Long
GetValue = Space(MAX_PATH)

l = GetPrivateProfileString(szSectionName, szKeyName, " ", GetValue, MAX_PATH, mvarFileName)
GetValue = Mid$(GetValue, 1, l)
End Function

'supprime toutes les clés et valeurs de la section szSection
'==============================================
'szSection : nom de la section à supprimer
'renvoie 0 en cas d'erreur, pas zéro sinon
Public Function DeleteKeys(ByVal szSection As String) As Long
    DeleteKeys = WritePrivateProfileSection(szSection, "", mvarFileName)
End Function

'supprime la valeur (et la clé elle-même) de la clé szKey de la section szSection
'==============================================
'szSection : nom de la section dans laquelle se trouve la clé szKey
'szKey     : nom de la clé qui contient la valeur à supprimer
'renvoie 0 en cas d'erreur, pas zéro sinon
Public Function DeleteValue(ByVal szSection As String, ByVal szKey As String) As Long
    DeleteValue = WritePrivateProfileString(szSection, szKey, ByVal 0&, mvarFileName)
End Function

