Attribute VB_Name = "MVWIni" Option Explicit 'Modul für den Zugriff auf INI-Dateien (Text-Dateien) '© 2000-2002, INOSOFT GmbH 'Version 4.04.000 'Funktionen: '-Read Liest einen Eintrag aus einem Bereich einer INI-Datei '-ReadEx Liest einen Eintrag aus einem Bereich einer INI-Datei (mit Wertprüfung) '-ReadLong Liest einen Eintrag aus einem Bereich einer INI-Datei (als Long-Wert) '-Store Schreibt einen Eintrag in einem Bereich einer INI-Datei '-Sections Listet alle Bereiche einer INI-Datei auf '-Entries Ermittelt alle Einträge eines Bereiches mit Wert einer INI-Datei '-DeleteSection Entfernt einen kompletten Bereich aus einer INI-Datei '-DeleteEntry Entfernt einen Eintrag aus einem Bereich der INI-Datei 'Abhängigkeiten/zusätzliche Dateien: '-CVWValue.cls Klassenmodul "CVWValue" Private Declare Function GetPrivateProfileLong Lib "kernel32" Alias "GetPrivateProfileIntA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal nDefault As Long, _ ByVal lpFileName As String _ ) As Long Private Declare Function GetPrivateProfileString Lib "kernel32" 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 Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String _ ) As Long Public Function Read(ByVal Section As String, _ ByVal Entry As String, _ Optional ByVal Default As String = "", _ Optional ByVal FileName As String = "" _ ) As String 'Liest einen Eintrag aus einem Bereich einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' Entry: Name des Eintrags ' Default: Rückgabewert, wenn Datei, Eintrag oder Bereich nicht existiert ' Dieser Parameter kann beim Aufruf weggelassen werden. ' FileName: Pfad und Name der INI-Datei ' Dieser Parameter kann beim Aufruf weggelassen werden, ' dann wird der Programmpfad und -name verwendet. 'Ausgabe: ' Read: Wert des angegebenen Eintrags aus der Datei ' oder Wert des Parameters Default. Dim lR As Long, scBuffer As String * 1000 lR = GetPrivateProfileString(Section, Entry, Default, scBuffer, Len(scBuffer), IniFileName(FileName)) If Len(Section) = 0 Or Len(Entry) = 0 Then Read = Default Else Read = Left$(scBuffer, lR) End If End Function Public Function ReadEx(ByVal Section As String, _ ByVal Entry As String, _ ByVal DataType As VbVarType, _ Optional ByVal Default As Variant = "", _ Optional ByVal FileName As String = "", _ Optional ByVal Minimum As Variant, _ Optional ByVal Maximum As Variant _ ) As Variant 'Liest einen Eintrag aus einem Bereich einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' Entry: Name des Eintrags ' DataType: Festlegung des Visual-Basic-Datentyps für den Rückgabewert ' Default: Rückgabewert, wenn Datei, Eintrag oder Bereich nicht existiert ' Dieser Parameter kann beim Aufruf weggelassen werden. ' FileName: Pfad und Name der INI-Datei ' Dieser Parameter kann beim Aufruf weggelassen werden, ' dann wird der Programmpfad und -name verwendet. 'Ausgabe: ' ReadEx: Wert des angegebenen Eintrags aus der Datei ' oder Wert des Parameters Default ' oder False/0/0.0/""/00:00:00 (je nach Datentyp) wenn Default und Dateieintrag fehlen. Dim lR As Long, scBuffer As String * 1000 Dim s As String On Error GoTo errReadEx lR = GetPrivateProfileString(Section, Entry, "", scBuffer, Len(scBuffer), IniFileName(FileName)) If lR = 0 Then s = Default Else s = Left$(scBuffer, lR) End If Select Case DataType Case vbBoolean, vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDecimal, vbDate Select Case DataType Case vbBoolean 'Boolean-Werte werden als 0 und 1 abgespeichert. ReadEx = CBool(Val(s)) Case vbByte ReadEx = CByte(Val(s)) Case vbInteger ReadEx = CInt(Val(s)) Case vbLong ReadEx = CLng(Val(s)) Case vbSingle ReadEx = CSng(Val(s)) Case vbDouble ReadEx = CDbl(Val(s)) Case vbCurrency ReadEx = CCur(Val(s)) Case vbDecimal ReadEx = CDec(Val(s)) Case vbDate 'Zeit/Datum wird als Kommazahl(!!) abgespeichert, das ist unabhängig von irgendeiner Spracheinstellung! ReadEx = CDate(CDbl(Val(s))) End Select Case vbString ReadEx = s Case Else ReadEx = Default End Select If Not IsMissing(Minimum) Then If ReadEx < Minimum Then If IsMissing(Default) Then ReadEx = Minimum Else ReadEx = Default End If End If End If If Not IsMissing(Maximum) Then If ReadEx > Maximum Then If IsMissing(Default) Then ReadEx = Maximum Else ReadEx = Default End If End If End If Exit Function errReadEx: ReadEx = Default End Function Public Function ReadLong(ByVal Section As String, _ ByVal Entry As String, _ Optional ByVal Default As Long = 0, _ Optional ByVal FileName As String = "", _ Optional ByVal Minimum As Variant, _ Optional ByVal Maximum As Variant _ ) As Long 'Liest einen Eintrag aus einem Bereich einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' Entry: Name des Eintrags ' Default: Rückgabewert, wenn Datei, Eintrag oder Bereich nicht existiert ' Dieser Parameter kann beim Aufruf weggelassen werden. ' FileName: Pfad und Name der INI-Datei ' Dieser Parameter kann beim Aufruf weggelassen werden, ' dann wird der Programmpfad und -name verwendet. ' Minimum/Maximum: Grenzen, in denen der Wert liegen muss, ' andernfalls wird der Default-Wert zurückgegeben 'Ausgabe: ' ReadLong: Wert des angegebenen Eintrags aus der Datei ' oder Wert des Parameters sVorgabe. ReadLong = GetPrivateProfileLong(Section, Entry, Default, IniFileName(FileName)) If Not IsMissing(Minimum) Then If ReadLong < Minimum Then ReadLong = Default End If End If If Not IsMissing(Maximum) Then If ReadLong > Maximum Then ReadLong = Default End If End If End Function Public Sub Store(ByVal Section As String, _ ByVal Entry As String, _ ByVal Value As Variant, _ Optional ByVal FileName As String = "" _ ) 'Schreibt einen Eintrag in einem Bereich einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' Entry: Name des Eintrags ' Value: neuer Wert des Eintrags ' FileName: Pfad und Name der INI-Datei ' Dieser Parameter kann beim Aufruf weggelassen werden, ' dann wird der Programmpfad und -name verwendet. 'Ausgabe: ' keine Dim s As String If IsNull(Value) Or IsEmpty(Value) Then Value = vbNullString End If Select Case VarType(Value) Case vbBoolean 'Boolean-Werte werden als 0 und 1 abgespeichert. s = Abs(Value) Case vbByte, vbInteger, vbLong s = CStr(Value) Case vbSingle, vbDouble, vbCurrency, vbDecimal 'Kommazahlen werden mit Punkt (.) als Dezimalzeichen abgespeichert s = Trim(Str(Value)) Case vbDate 'Zeit/Datum wird als Kommazahl(!!) abgespeichert, das ist unabhängig von irgendeiner Spracheinstellung! s = Trim(Str(CDbl(Value))) Case Else s = Value End Select WritePrivateProfileString Section, Entry, s, IniFileName(FileName) WritePrivateProfileString vbNullString, vbNullString, vbNullString, IniFileName(FileName) End Sub Public Function Sections(Optional ByVal FileName As String = "" _ ) As Collection 'Listet alle Bereiche einer INI-Datei auf. 'Eingabe: ' FileName: Name der INI-Datei (siehe Funktion IniFileName) 'Ausgabe: ' Sections: Sammlung der Bereiche (Strings) Dim scBuffer As String * 1000, lR As Long Dim nPos1 As Integer, nPos2 As Integer Dim col As New Collection lR = GetPrivateProfileString(vbNullString, vbNullString, "", scBuffer, Len(scBuffer), IniFileName(FileName)) If lR Then nPos1 = 0 Do nPos2 = InStr(nPos1 + 1, scBuffer, vbNullChar) If nPos2 = nPos1 + 1 Then Exit Do col.Add Mid$(scBuffer, nPos1 + 1, nPos2 - nPos1 - 1) nPos1 = nPos2 Loop End If Set Sections = col End Function Public Function Entries(ByVal Section As String, _ Optional ByVal FileName As String = "" _ ) As Collection 'Ermittelt alle Einträge eines Bereiches mit Wert einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' FileName: Name der INI-Datei (siehe Funktion IniFileName) 'Ausgabe: ' Entries: Sammlung mit CVWValue-Einträgen, enthält jeweils Name und Wert des Eintrags Dim scBuffer As String * 1000, lR As Long Dim nPos1 As Integer, nPos2 As Integer Dim col As New Collection, clsVWValue As CVWValue lR = GetPrivateProfileString(Section, vbNullString, "", scBuffer, Len(scBuffer), IniFileName(FileName)) If lR Then nPos1 = 0 Do nPos2 = InStr(nPos1 + 1, scBuffer, vbNullChar) If nPos2 = nPos1 + 1 Then Exit Do Set clsVWValue = New CVWValue clsVWValue.Name = Mid$(scBuffer, nPos1 + 1, nPos2 - nPos1 - 1) clsVWValue.Value = Read(Section, clsVWValue.Name, , FileName) col.Add clsVWValue nPos1 = nPos2 Loop End If Set Entries = col End Function Public Sub DeleteSection(ByVal Section As String, _ Optional ByVal FileName As String = "" _ ) 'Entfernt einen kompletten Bereich aus einer INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' FileName: Name der INI-Datei (siehe Funktion IniFileName) 'Ausgabe: ' keine WritePrivateProfileString Section, vbNullString, vbNullString, IniFileName(FileName) WritePrivateProfileString vbNullString, vbNullString, vbNullString, IniFileName(FileName) End Sub Public Sub DeleteEntry(ByVal Section As String, _ ByVal Entry As String, _ Optional ByVal FileName As String = "" _ ) 'Entfernt einen Eintrag aus einem Bereich der INI-Datei. 'Eingabe: ' Section: Name des Bereiches ' Entry: Name des Eintrags ' FileName: Name der INI-Datei (siehe Funktion IniFileName) 'Ausgabe: ' keine If Len(Section) = 0 Then Exit Sub End If WritePrivateProfileString Section, Entry, vbNullString, IniFileName(FileName) WritePrivateProfileString vbNullString, vbNullString, vbNullString, IniFileName(FileName) End Sub Private Function IniFileName(ByVal FileName As String) As String 'Ermittelt den Dateinamen der Ini-Datei. 'Eingabe: ' FileName: Name der INI-Datei (siehe Funktion IniFileName) 'Ausgabe: ' IniFileName: Ermittelter Dateiname. On Error GoTo errIniFileName If Len(FileName) = 0 Then 'kein Dateiname angegeben => Applikationspfad und -name mit Endung .ini IniFileName = App.Path & "\" & App.EXEName & ".ini" Else If InStr(FileName, "\") = 0 Then 'kein Pfad angegeben => Applikationspfad davorhängen IniFileName = App.Path & "\" & FileName Else IniFileName = FileName End If End If Exit Function errIniFileName: Err.Raise vbObjectError + 1000, , "Cannot determine INI file name. Use method VWSetHostApp to connect VWTools library to your application." End Function