Um die Nutzung durch den Benutzer zu erleichtern und das System flexibel zu gestalten, zeichnen die meisten Windows-Anwendungen die vom Benutzer getroffenen Entscheidungen und verschiedene geänderte Systeminformationen in der Initialisierungsdatei (INI) auf. Wenn sich die Systemumgebung ändert, kann daher die INI-Datei direkt geändert werden, ohne das Programm zu ändern. Es ist ersichtlich, dass die INI-Datei für die Systemfunktionalität von entscheidender Bedeutung ist. In diesem Artikel erfahren Sie, wie Sie INI-Dateien lesen und schreiben, wenn Sie Windows-Anwendungen mit Visual Basic für Windows (im Folgenden als VB bezeichnet) entwickeln.
Die INI-Datei ist eine Textdatei, die aus mehreren Abschnitten besteht, die mit einem einzelnen Wort und einem Gleichheitszeichen beginnen. Jedes Schlüsselwort steuert einen bestimmten Aspekt der Anwendung Bei der Funktion gibt der Wert auf der rechten Seite des Gleichheitszeichens den Betriebsmodus des Schlüsselworts an. Seine allgemeine Form ist wie folgt:
[Abschnitt1]
Schlüsselwort1=Wert
Schlüsselwort2=Wert2
…
[Abschnitt2]
Schlüsselwort1=Wert1
Schlüsselwort2=Wert2
…
Wenn sich auf der rechten Seite des Gleichheitszeichens nichts befindet (d. h. der Wert ist leer), bedeutet dies, dass die Windows-Anwendung einen Standardwert für das Schlüsselwort If (oder einen ganzen Teil davon) angegeben hat nicht in der gesamten Datei gefunden, was auch bedeutet, dass für sie Standardwerte angegeben sind. Die Reihenfolge, in der die Teile erscheinen, ist irrelevant, ebenso wie die Reihenfolge der Schlüsselwörter innerhalb jedes Teils.
Normalerweise gibt es zwei Möglichkeiten, INI-Dateien zu lesen und zu schreiben: Eine besteht darin, sie mit „Notepad“ in Windows zu bearbeiten, was relativ einfach ist und keiner weiteren Beschreibung bedarf, die andere darin, INI-Dateien mit einer Windows-Anwendung zu lesen und zu schreiben, normalerweise mit Ausführen der Anwendung Die Informationen in der INI-Datei werden gelesen, wenn die Anwendung beendet wird, und bestimmte vom Benutzer an der laufenden Umgebung vorgenommene Änderungen werden beim Beenden der Anwendung gespeichert.
Der Werttyp von Schlüsselwörtern ist meist eine Zeichenfolge oder eine Ganzzahl und sollte in zwei Situationen gelesen und geschrieben werden. Um das Programm wartbar und portierbar zu machen, ist es am besten, das Lesen und Schreiben von INI-Dateien in einem Modul (RWINI.BAS) zu kapseln und die Funktionen GetIniS und GetIniN sowie SetIniS und SetIniN in RWI-NI.BAS zu konstruieren .Prozess müssen Sie in diesen Funktionen und Prozessen die Funktionen „GetPRivateprofileString“, „GetPrivateProfileInt“ und „WritePrivateProfileString“ der Windows-API verwenden.
Der Programmcode des RWINI.BAS-Moduls lautet wie folgt:
Deklarieren Sie die im Abschnitt „General-Declaration“ verwendeten Windows-API-Funktionen:
DeclareFunctionGetprivateprofileStringLib"Ker-nel"(ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsString, ByVallpRetrm-StringAsString, ByValcbReturnStringAsInteger, ByValFilenameAsString)AsInteger
DeclareFunctionGetPrivatePfileIntLib"Kernel"(ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsInteger, ByValFilenameAsString)AsInteger
DeclareFuncitonWritePrivateprofileStringLib"Kernel"(ByVallpapplicationNameAsString, ByVallpKeyNameAsString, ByVallpStringAsString, ByVallplFileNameAsString)AsInteger
FunctionGetIniS(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefStringAsString)AsString
DimResultStringAsString*144,TempAsInteger
DimsAsString, iAsInteger
Temp=GetPrivateProfileString(SectionName,KeyWord,"",ResultString,144,AppProfileName())
'Den Wert des Schlüsselworts abrufen
IfTemp>0Then'keyword value is not empty
s=""
Fori=1To144
IfAsc(Mid$(ResultString,I,1))=0Then
ExitFor
Anders
s=s&Mid$(ResultString, I, 1)
EndIf
Nächste
Anders
Temp=WritePrivateProfilesString(Abschnittsname,Schlüsselwort,DefString,ppProfileName())
'Standardwerte in INI-Datei schreiben
s=DefString
EndIf
GetIniS=s
EndFunction
FunctionGetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefValue
AsInteger)AsInteger
DimdAsLong,sAsString
d=DefValue
GetIniN=GetPrivateProfileInt(SectionName,
Schlüsselwort,DefValue,ppProfileName())
Ifd<>DefValueThen
s=""&d
d=WritePrivateProfileString(Abschnittsname,
Schlüsselwort,s,AppProfileName())
EndIf
EndFunction
SubSetIniS(ByValSectionNameAsString, BtVaKeyWordAsString, ByValValStr
AsString)
Dimres
res=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub
SubSetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValValInt
AsInteger)
Dimres,s$
s$=Str$(ValInt)
res=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
EndSub
SectionName ist der Titel jedes Abschnitts, KeyWord ist das Schlüsselwort, DefValue in GetIniS und GetIniN ist der Standardwert des Schlüsselworts und ValStr und ValInt in SetIniS und SetIniN sind die Werte des Schlüsselworts, die in die INI-Datei geschrieben werden sollen. Um die Verwendung der oben genannten Funktionen und Verfahren besser zu veranschaulichen, werden im Folgenden zwei Beispiele aufgeführt.
Beispiel 1:
Die Entwicklung von Anwendungen erfordert in der Regel die Verwendung von Datenbanken und anderen Dateien. Die Verzeichnisse dieser Dateien (einschließlich Pfade und Dateinamen) sollten nicht im Programm festgelegt sein, sondern in INI-Dateien gespeichert werden, die beim Starten des Programms aus den INI-Dateien gelesen werden läuft. Der Code zum Lesen der Datenbankdatei lautet wie folgt:
DimDatabasenameAsString
Datenbankname=GetIniS("Datenbank", "Mitarbeiter", "")
IfDatabaseName=""ThenDatabaseName=InputBox("Bitte geben Sie das Verzeichnis der Datenbank "Mitarbeiter" ein),
App.Title)‘ kann auch über den „Dateidialog“ ausgewählt werden.
OnErrorResumeNext
Setdb=OpenDatabas(Datenbankname)
IfErr<>0Then
MsgBox „Datenbank konnte nicht geöffnet werden!“, MB-
ICONSTOP,App.Title:GotoErrorProcessing
Anders
SetIniS"Database","Employee",DatabaseName
EndIf
OnErrorGoTo0
…
Beispiel 2:
Um Benutzeroperationen zu erleichtern, ist es manchmal erforderlich, bestimmte Informationen der Benutzeroberfläche zu speichern, z. B. die Höhe und Breite des Fensters. Lesen Sie beim Laden des Formulars die Höhe und Breite des Formulars aus der INI-Datei. Speichern Sie beim Entladen des Formulars die aktuelle Höhe und Breite des Formulars in der INI-Datei.
SubForm1_Load()
…
Forml.Height=GetIniN("Form 1", "Height", 6000)
Form1.Width=GetIniN("Form1","Height",4500)
EndSub
…
SubForm1_Unload()
…
SetIniN"Form1","Height",Me.Height
SetIniN"Form1,"Width",Me.Width
…
EndSub->