Die meisten Anwendungen in Windows verfügen über eigene Initialisierungsdateien, z. B. PowerBuilder, Office und Cstar. Daher ist das Lesen und Schreiben von Initialisierungsdateien eine Technologie, die jeder erfahrene Programmierer beherrschen muss. Obwohl das Lesen und Schreiben von Initialisierungsdateien auch mit Object erfolgen kann Textdateien in Pascal werden auf die gleiche Weise gelesen und geschrieben, aber da sich die Initialisierungsdatei von gewöhnlichen Textdateien unterscheidet, hat sie ein eigenes festes Format (siehe die Initialisierungsdatei unten, die in ucdos bereitgestellt wird). Verwenden Sie zum Lesen eine Textdatei. Die Formatkonvertierung ist nicht nur sehr mühsam, sondern auch fehleranfällig. Um Programmierern das Lesen und Schreiben von Daten in der Initialisierungsdatei zu erleichtern, stellt Delphi Benutzern eine TIniFile-Klasse zur Verfügung, über die die Initialisierungsdatei erstellt werden kann lässt sich sehr bequem lesen und schreiben.
Der Inhalt der Datei rdfnt.ini in Ucdos ist:
[Verzeichnis für True Type-Schriftarten]
Dir=C:WINDOWSSYSTEM
[Liste der True-Type-Schriftarten]
ARIAL.TTF=64
ARIALBD.TTF=65
ARIALI.TTF=66
ARIALBI.TTF=67
TIMES.TTF=68
TIMESBD.TTF=69
TIMESI.TTF=70
TIMESBI.TTF=71
COUR.TTF=72
COURBD.TTF=73
COURI.TTF=74
COURBI.TTF=75
[Alle True Type-Schriftarten verwenden]
Alle=0
Die TiniFile-Klasse ist keine Delphi-Komponente und kann daher nicht in der VCL-Vorlage von Delphi gefunden werden. Sie ist in der Inifiles-Einheit im Delphi-System definiert. Um die TiniFile-Klasse zu verwenden, müssen Sie daher explizit die Uses-Inifiles-Direktive in der Unit verwenden Datei, die diese Klasse verwendet, illustrieren.
In der TiniFile-Klasse sind viele Mitgliedsfunktionen definiert. Hier sind einige häufiger verwendete Mitgliedsfunktionen:
⑴Erstellen()
Die Funktion ist definiert als: Konstruktor Create(const FileName: string);
Diese Funktion erstellt ein Objekt der TiniFile-Klasse. Der Parameter FileName ist der Name der Initialisierungsdatei, die gelesen und geschrieben werden soll.
Wenn sich die zu lesende und zu schreibende Datei im Windows-Verzeichnis befindet (z. B. die Datei system.ini), können Sie den Dateinamen direkt schreiben, ohne den Pfad anzugeben. Andernfalls müssen Sie den Pfad angeben (z. B. d:ucdos dfnt.ini). ).
Wenn die Datei gemäß den folgenden Regeln im angegebenen Verzeichnis vorhanden ist, öffnen Sie die Initialisierungsdatei. Andernfalls erstellen Sie die Initialisierungsdatei im angegebenen Verzeichnis.
⑵ReadSections()
Der Prozess ist definiert als: PROcedure ReadSections(Strings: TStrings);
Dieser Prozess liest alle Knotennamen (d. h. den in []-Klammern eingeschlossenen Teil, z. B. [True Type-Schriftarten] in der Datei rdfnt.ini) aus dem erstellten TiniFile-Klassenobjekt (d. h. der damit verbundenen Initialisierungsdatei). Liste]) wird in der String-Liste gespeichert. Der Parameter Strings ist der Variablenname der Stringliste.
⑶ ReadSectionValues()
Die Prozedur ist definiert als: procedure ReadSectionValues(const Section: string; Strings: TStrings);
Dieser Prozess konvertiert jedes Schlüsselwort (z. B. ARIALBI.TTF) im Knoten, der dem Wert des Parameterabschnitts (z. B. [Liste der True-Type-Schriftarten] in der Datei rdfnt.ini) und dem darin enthaltenen Wert (z. B. ARIALBI.TTF) entspricht. Der TTF-Schlüsselwortwert ist 67) wird in die durch den Parameter Strings angegebene String-Liste eingelesen.
⑷ ReadSection()
Die Prozedur ist definiert als: procedure ReadSection(const Section: string; Strings: TStrings);
Dieser Prozess liest jedes Schlüsselwort im Knoten, das dem Wert des Parameters Abschnitt entspricht, in die durch den Parameter Strings angegebene Zeichenfolgenliste. Der Unterschied zu ReadSectionValues() besteht darin, dass nicht der entsprechende Wert jedes Schlüsselworts gelesen wird.
⑸ ReadString()
Die Funktion ist definiert als: function ReadString(const Section, Ident, Default: string): string;
Diese Funktion gibt den Schlüsselwortwert entsprechend dem Knotennamen mit dem Wert des Parameters Abschnitt und den Schlüsselwortnamen mit dem Wert des Parameters Ident zurück (z. B. den Wert des Schlüsselworts ARIALBI.TTF im Abschnitt [True Type-Schriftartenliste]). ist 67). Wenn das Schlüsselwort im angegebenen Knoten oder Abschnitt nicht vorhanden ist, gibt die Funktion den Standardwert des Parameters Default zurück. Der zurückgegebene Wert ist ein String-Datenwert.
Wenn der Datentyp des Schlüsselwortwerts im angegebenen Knoten keine Zeichenfolge ist, können Sie die Memberfunktion ReadInteger() verwenden, um einen ganzzahligen Wert zu lesen, und die Memberfunktion ReadBool(), um einen booleschen Wert zu lesen.
⑹ WriteString()
Die Prozedur ist definiert als: procedure WriteString(const Section, Ident, Value: string);
Dieser Prozess setzt den Schlüsselwortwert, in dem der Wert des Parameters Abschnitt der Knotenname und der Wert des Parameters Ident der Schlüsselwortname ist, auf den Wert des Parameters Wert. Dieser Prozess legt String-Daten fest.
Wenn sowohl der angegebene Knoten als auch das Schlüsselwort vorhanden sind, wird der Wert von Value verwendet, um den ursprünglichen Wert zu ersetzen. Wenn der angegebene Knoten nicht vorhanden ist, wird der zugehörigen Initialisierungsdatei automatisch ein Knoten hinzugefügt, und der Wert des Knotens ist der Wert von Der Parameterabschnitt und das Schlüsselwort A werden automatisch unter dem Knoten hinzugefügt. Der Schlüsselwortname ist der Wert des Parameters Ident, und der dem Schlüsselwort entsprechende Wert ist der Wert des Parameters Wert Nicht vorhanden, ein Schlüsselwort wird automatisch unter dem Knoten hinzugefügt. Der Schlüsselwortname ist der Wert des Parameters Ident, und der diesem Schlüsselwort entsprechende Wert ist der Wert des Parameters Value.
Um einen ganzzahligen Wert festzulegen, rufen Sie die Memberfunktion WriteInteger() auf; verwenden Sie die Memberfunktion WriteBool(), um einen booleschen Wert festzulegen.
Wenn Sie die Funktionen der oben genannten Funktionen kennen, ist es nicht schwierig, eine Initialisierungsdatei zu erstellen oder zu lesen und zu schreiben. Im Folgenden wird die Lesemethode der Initialisierungsdatei anhand eines praktischen Beispiels veranschaulicht. Die Schritte sind wie folgt:
⒈ Platzieren Sie zwei kombinierte Listenfelder mit den Namen SectionComboBox und IdentComboBox auf dem Formular, das die Initialisierungsdatei lesen und schreiben muss. Die SectionComboBox speichert den Knotennamen und die IdentComboBox speichert den Schlüsselnamen des ausgewählten Knotens. Ein Eingabefeld namens IdentValueEdit speichert den Wert des entsprechenden Schlüsselworts. Mit der Änderungsbefehlsschaltfläche „CmdChang“ können Sie den Wert des Schlüsselworts ändern. Nach der Änderung können Sie den geänderten Schlüsselwortwert mit der Speicherbefehlsschaltfläche „CmdSave“ in der zugehörigen Initialisierungsdatei speichern. Der dem Formular entsprechende Einheitenname ist auf IniUnit festgelegt, der Formularname ist auf IniForm festgelegt und das Formularlayout ist wie in Abbildung 1 unten dargestellt:
⒉ Im Schnittstellenteil der IniUnit-Einheit werden Inifiles verwendet, um den durch die zu referenzierende TiniFile-Klasse definierten Einheitennamen anzugeben. Und definieren Sie das Objekt der TiniFile-Klasse im Variablenbeschreibungsteil, z
var IniFile: TiniFile;
⒊ Richten Sie die OnCreate-Ereignisprozedur des Formulars ein. Verwenden Sie die Memberfunktion „Create“ der TIniFile-Klasse, um ein TIniFile-Objekt zu erstellen, verwenden Sie dieses Objekt zum Lesen und Schreiben der Initialisierungsdatei „rdfnt.ini“ im Verzeichnis „d:ucdos“ und lesen Sie alle Knoten in der Initialisierungsdatei in das Kombinationslistenfeld „SectionComboBox“ ein Verwenden Sie über die Member-Funktion ReadSections() die Member-Funktion ReadSection(), um alle Schlüsselwörter im ersten Knoten in die IdentComboBox einzulesen Verwenden Sie im kombinierten Listenfeld die Memberfunktion ReadString(), um den Wert des ersten Schlüsselworts an das Eingabefeld IdentValueEdit zu senden.
⒋ Erstellen Sie den OnChange-Ereignisprozess des kombinierten Listenfelds SectionComboBox. Wenn Sie verschiedene Elemente im Listenfeld auswählen (d. h. unterschiedliche Knotennamen), verwenden Sie die Memberfunktion ReadSection(), um alle Schlüsselwörter im ausgewählten Knoten in das kombinierte Listenfeld IdentComboBox einzulesen, und verwenden Sie zum Lesen die Memberfunktion ReadString() Der erste Wert des Schlüsselworts wird an das Eingabefeld IdentValueEdit gesendet.
⒌ Richten Sie den OnChange-Ereignisprozess des IdentComboBox-Kombinationslistenfelds ein. Wenn Sie verschiedene Elemente (d. h. unterschiedliche Schlüsselwortnamen) im Listenfeld auswählen, verwenden Sie die Memberfunktion ReadString(), um den Wert des Schlüsselworts in das Eingabefeld IdentValueEdit zu senden.
⒍ Erstellen Sie den OnClick-Ereignisprozess der Befehlsschaltfläche CmdChang. Machen Sie den Inhalt im IdentValueEdit-Eingabefeld änderbar (das IdentValueEdit-Eingabefeld kann nicht geändert werden, ohne die Befehlsschaltfläche zu drücken), und legen Sie die Befehlsschaltfläche CmdSave auf gültig fest, damit der geänderte Schlüsselwortwert in der zugehörigen Initialisierungsdatei gespeichert werden kann.
⒎ Erstellen Sie den OnClick-Ereignisprozess der Befehlsschaltfläche CmdSave. Wenn sich der Schlüsselwortwert geändert hat, rufen Sie die Memberfunktion WriteString() auf, um den geänderten Schlüsselwortwert auf der Festplatte zu speichern.
⒏ Erstellen Sie die OnDestroy-Ereignisprozedur des Formulars. Wenn das Formular fehlschlägt, wird das erstellte TIniFile-Objekt freigegeben, um die vom Objekt verwendeten Systemressourcen freizugeben.
Zu diesem Zeitpunkt kann das Lesen und Schreiben der Initialisierungsdatei nach dem Ausführen des Projekts reibungslos erfolgen. Natürlich können Sie auch die Member-Funktion EraseSection() verwenden, um den angegebenen Abschnitt zu löschen, und Sie können auch die Member-Funktion DeleteKey() verwenden, um das angegebene Schlüsselwort zu löschen. Aus Platzgründen werde ich es hier nicht im Detail vorstellen. Bei Interesse können Sie auf die Delphi-Nutzungshilfe zurückgreifen.
Das Folgende ist der Quellcode dieser Einheit:
Einheit IniUnit;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge,
StdCtrls, Infiles;
Typ
TIniForm = class(TForm)
SectionComboBox: TComboBox;
Label1: TLabel;
CmdSave: TButton;
CmdChang: TButton;
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure SectionComboBoxChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CmdChangClick(Sender: TObject);
procedure CmdSaveClick(Sender: TObject);
procedure IdentComboBoxChange(Sender: TObject);
Privat
{Private Erklärungen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
IniForm: TIniForm;
{Lesen und schreiben Sie Windows-Initialisierungsdateien über die TIniFile-Klasse in Delphi}
IniFile: TIniFile;
Durchführung
{$R *.DFM}
procedure TIniForm.FormCreate(Sender: TObject);
beginnen
{ Verwenden Sie die Memberfunktion „Create“ der TIniFile-Klasse, um ein TIniFile-Paar zu erstellen
Objekt, dieses Objekt wird zum Lesen und Schreiben der Datei rdfnt.ini im Verzeichnis d:ucdos verwendet.
Befindet sich die zu lesende und zu schreibende Datei im Windows-Verzeichnis (z. B. system.ini),
Sie können den Dateinamen direkt schreiben, ohne den Pfad anzugeben}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ Alle Inhalte in der Initialisierungsdatei system.ini, die dem TIniFile-Objekt zugeordnet ist
Abschnittsnamen mit Abschnitten (d. h. der in []-Klammern eingeschlossene Teil) werden an die Dropdown-Gruppe gesendet
Kombinationslistenfeld SectionComboBox}
SectionComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{Wählen Sie den ersten Abschnittsnamen der system.ini-Datei aus}
SectionComboBox.ItemIndex:=0;
SectionComboBoxChange(Sender);
CmdSave.Enabled:=False;
Ende;
{Die entsprechenden Elemente im ausgewählten Abschnitt im Kombinationslistenfeld IniComboBox
Die Variablen und entsprechenden Werte werden an den mehrzeiligen Texteditor IniMemo gesendet}
procedure TIniForm.SectionComboBoxChange(Sender: TObject);
beginnen
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(Sender);
Ende;
procedure TIniForm.IdentComboBoxChange(Sender: TObject);
beginnen
IdentValueEdit.Enabled:=False;
{Lesen Sie den ausgewählten Schlüsselwortwert}
IdentValueEdit.Text:=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Text,');
Ende;
procedure TIniForm.CmdChangClick(Sender: TObject);
beginnen
CmdSave.Enabled:=True;
IdentValueEdit.Enabled:=True;
IdentValueEdit.SetFocus;
Ende;
procedure TIniForm.CmdSaveClick(Sender: TObject);
beginnen
Wenn IdentValueEdit.Modified, dann beginnen
IniFile.WriteString(SectionComboBox.Text,
IdentComboBox.Text,
IdentValueEdit.Text);
Ende;
IdentValueEdit.Enabled:=False;
CmdSave.Enabled:=False;
Ende;
procedure TIniForm.FormDestroy(Sender: TObject);
beginnen
IniFile.Free; {das erstellte Objekt freigeben}
Ende;
Ende.
Die obige Methode hat das Debuggen mit Delphi 3.0 unter Windows 95 bestanden.