Andi
1. March 2003, 11:02
1.)Grundlagen
2.1)Integer auslesen
2.2)String auslesen
3.1)Integer schreiben
3.2)String schreiben
4.)Besonderheiten
1.) Grundlagen
Eine Ini-Datei ist immer nach einem einfachen Grundprinzip aufgebaut:
[sektion 1]
integer=20
string=Test
[sektion 2]
integer=50
string=Teststring
Eine ini-Datei wird generell im Systemverzeichnis gespeichert (meistens C:windows bzw. C:WinNT). Es gibt nur wenige Ausnahmen, bei der eine ini im eigenen Programmverzeichnis gibt.
Um Ini-Dateien zu benutzen muss an die uses-Klausel die Datei Ini-Files angehängt werden. Das sieht dann beispielsweise so aus:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
2.1)Integer auslesen
Erst einmal ein Beispiel:
procedure TForm1.IAuslesen(Sender: TObject);
var
Ausgelesen: Integer; //1
Ini: TIniFile; //2
begin
Ini := TIniFile.Create(\'bsp.ini\'); //3
Ausgelesen := Ini.ReadInteger(\'Testsektion\',\'Testinteger\',0) ; //4
Ini.Free; //5
end;
Nun noch ein Kommentar:
1.)Deklarierung der Zielvariable
2.)Deklarierung der Variable, die später die Kontrolle über die Ini-File darstellt.
3.)Erstellt eine art Handle auf eine Ini-File mit dem Namen ‚bsp.ini’.
4.) Diese befehl speichert in der Variable ‚Ausgelesen’ den Wert der Variable Testinteger in der Sektion Testsektion.
Der genaue Syntax dieser Variable lautet
TiniFile.ReadInteger(Sektion, Variable: String; Standartvariable: Integer);
Die Standartvariable gibt dabei an, was passieren soll, wenn die Sektion oder die Variable nicht gefunden wurde. In unserem Beispiel wird dann der Wert der Variable ‚Ausgelesen’ in 0 umgewandelt.
5.) Hier wird das Handle auf die Ini wieder entfernt und Speicherplatz wieder freigegeben. (Die Variable Ini wird sozusagen freigelassen.)
2.2) String auslesen
procedure TForm1. SAuslesen (Sender: TObject);
var
Ausgelesen: String;
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ausgelesen := Ini.ReadString(\'Testsektion\',\'Teststring\',\'\' ); //1
Ini.Free;
end;
Hier ist eigentlich nur die Zeile
Ausgelesen := Ini.ReadString(\'Testsektion\',\'Teststring\',\'\' ); //1
interessant.
Diese Zeile weicht nur leicht von dem oberen Beispiel ab, da ja immer noch das selbe Adresssystem verwendet wird. Nur die Standartvariable ist nun nicht mehr Integer, sondern String, weil die Variable ‚Ausgelesen’ nun ja auch vom Typ String ist.
3.1) Integer schreiben
procedure TForm1.ISchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ini.WriteInteger(\'Testsektion\',\'Testinteger\',1 0); //1
Ini.Free;
end;
Auch dieses mal schauen wir uns nur die Zeile mit dem 1 dahinter an Dieses mal wird keine function, sondern eine procedure aufgerufen, die keinen Rückgabewert hat (daher ist auch die Deklaration der Variable ausgelesen weggefallen).
3.2) String schreiben.
procedure TForm1.SSchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ini.WriteString(\'Testsektion\',\'Teststring\',\'T est\');
Ini.Free;
end;
Ich denke man kann sich selbst erklären, wie das funktioniert, wenn man den oberen Text verstanden hat..
4.) Besonderheiten
Probleme mit Ini-Dateien können bei Delphi 6 schon mal auftreten. Da ich denke, dass Delphi 6 am meisten verbreitet ist, sollte ich dass hier erwähnen (Ach ja: Ich weiß nicht, wie es mit Delphi <= 5 aussieht. Ich empfehle daher außer bei Delphi 7 besser die folgende Schreibweise zu verwenden) :
procedure TForm1.SSchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\'); //1
Try //2
Ini.WriteInteger(\'Testsektion\',\'Teststrin\',10) ; //3
Finally //4
Ini.Free; //5
end; //6
end;
Wichtig an diesem Code sind die Zeilen 2,4,5 und 6: Sie verhindern, dass der Speicherplatz selbst bei einem Fehler bei der Programmausführung frei gegeben wird.
1.)Das Handle wird erstellt
2.,4.,6.)eine try ... finally ... end; –Konstruktion wird eingeleitet. Wenn nun zwischen try und finally ein Fehler passiert oder alle Befehle dazwischen abgearbeitet sind, so wird sofort der Programmcode hinter finally bis zum end; ausgeführt. So ist sichergestellt, dass
5) Ini.Free ausgeführt wird und kein Speicherplatz ungenutzt bleibt.
So. Das war es fast. Jeder, sollte nun einfaches Handling mit Ini-Files beherrschen. Um das gelernte noch etwas zu erweitern, ist hier noch eine Liste von einfachen Deklarationen:
function ReadString(const Section, Ident, Default: string): string;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer;
function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadFloat(const Section, Name: string; Default: Double): Double;
function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;
procedure WriteString(const Section, Ident, Value: String);
procedure WriteInteger(const Section, Ident: string; Value: Longint);
procedure WriteBool(const Section, Ident: string; Value: Boolean);
procedure WriteBinaryStream(const Section, Name: string; Value: TStream);
procedure WriteDate(const Section, Name: string; Value: TDateTime);
procedure WriteDateTime(const Section, Name: string; Value: TDateTime);
procedure WriteFloat(const Section, Name: string; Value: Double);
procedure WriteTime(const Section, Name: string; Value: TDateTime);
2.1)Integer auslesen
2.2)String auslesen
3.1)Integer schreiben
3.2)String schreiben
4.)Besonderheiten
1.) Grundlagen
Eine Ini-Datei ist immer nach einem einfachen Grundprinzip aufgebaut:
[sektion 1]
integer=20
string=Test
[sektion 2]
integer=50
string=Teststring
Eine ini-Datei wird generell im Systemverzeichnis gespeichert (meistens C:windows bzw. C:WinNT). Es gibt nur wenige Ausnahmen, bei der eine ini im eigenen Programmverzeichnis gibt.
Um Ini-Dateien zu benutzen muss an die uses-Klausel die Datei Ini-Files angehängt werden. Das sieht dann beispielsweise so aus:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
2.1)Integer auslesen
Erst einmal ein Beispiel:
procedure TForm1.IAuslesen(Sender: TObject);
var
Ausgelesen: Integer; //1
Ini: TIniFile; //2
begin
Ini := TIniFile.Create(\'bsp.ini\'); //3
Ausgelesen := Ini.ReadInteger(\'Testsektion\',\'Testinteger\',0) ; //4
Ini.Free; //5
end;
Nun noch ein Kommentar:
1.)Deklarierung der Zielvariable
2.)Deklarierung der Variable, die später die Kontrolle über die Ini-File darstellt.
3.)Erstellt eine art Handle auf eine Ini-File mit dem Namen ‚bsp.ini’.
4.) Diese befehl speichert in der Variable ‚Ausgelesen’ den Wert der Variable Testinteger in der Sektion Testsektion.
Der genaue Syntax dieser Variable lautet
TiniFile.ReadInteger(Sektion, Variable: String; Standartvariable: Integer);
Die Standartvariable gibt dabei an, was passieren soll, wenn die Sektion oder die Variable nicht gefunden wurde. In unserem Beispiel wird dann der Wert der Variable ‚Ausgelesen’ in 0 umgewandelt.
5.) Hier wird das Handle auf die Ini wieder entfernt und Speicherplatz wieder freigegeben. (Die Variable Ini wird sozusagen freigelassen.)
2.2) String auslesen
procedure TForm1. SAuslesen (Sender: TObject);
var
Ausgelesen: String;
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ausgelesen := Ini.ReadString(\'Testsektion\',\'Teststring\',\'\' ); //1
Ini.Free;
end;
Hier ist eigentlich nur die Zeile
Ausgelesen := Ini.ReadString(\'Testsektion\',\'Teststring\',\'\' ); //1
interessant.
Diese Zeile weicht nur leicht von dem oberen Beispiel ab, da ja immer noch das selbe Adresssystem verwendet wird. Nur die Standartvariable ist nun nicht mehr Integer, sondern String, weil die Variable ‚Ausgelesen’ nun ja auch vom Typ String ist.
3.1) Integer schreiben
procedure TForm1.ISchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ini.WriteInteger(\'Testsektion\',\'Testinteger\',1 0); //1
Ini.Free;
end;
Auch dieses mal schauen wir uns nur die Zeile mit dem 1 dahinter an Dieses mal wird keine function, sondern eine procedure aufgerufen, die keinen Rückgabewert hat (daher ist auch die Deklaration der Variable ausgelesen weggefallen).
3.2) String schreiben.
procedure TForm1.SSchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\');
Ini.WriteString(\'Testsektion\',\'Teststring\',\'T est\');
Ini.Free;
end;
Ich denke man kann sich selbst erklären, wie das funktioniert, wenn man den oberen Text verstanden hat..
4.) Besonderheiten
Probleme mit Ini-Dateien können bei Delphi 6 schon mal auftreten. Da ich denke, dass Delphi 6 am meisten verbreitet ist, sollte ich dass hier erwähnen (Ach ja: Ich weiß nicht, wie es mit Delphi <= 5 aussieht. Ich empfehle daher außer bei Delphi 7 besser die folgende Schreibweise zu verwenden) :
procedure TForm1.SSchreiben(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(\'bsp.ini\'); //1
Try //2
Ini.WriteInteger(\'Testsektion\',\'Teststrin\',10) ; //3
Finally //4
Ini.Free; //5
end; //6
end;
Wichtig an diesem Code sind die Zeilen 2,4,5 und 6: Sie verhindern, dass der Speicherplatz selbst bei einem Fehler bei der Programmausführung frei gegeben wird.
1.)Das Handle wird erstellt
2.,4.,6.)eine try ... finally ... end; –Konstruktion wird eingeleitet. Wenn nun zwischen try und finally ein Fehler passiert oder alle Befehle dazwischen abgearbeitet sind, so wird sofort der Programmcode hinter finally bis zum end; ausgeführt. So ist sichergestellt, dass
5) Ini.Free ausgeführt wird und kein Speicherplatz ungenutzt bleibt.
So. Das war es fast. Jeder, sollte nun einfaches Handling mit Ini-Files beherrschen. Um das gelernte noch etwas zu erweitern, ist hier noch eine Liste von einfachen Deklarationen:
function ReadString(const Section, Ident, Default: string): string;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer;
function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadFloat(const Section, Name: string; Default: Double): Double;
function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;
procedure WriteString(const Section, Ident, Value: String);
procedure WriteInteger(const Section, Ident: string; Value: Longint);
procedure WriteBool(const Section, Ident: string; Value: Boolean);
procedure WriteBinaryStream(const Section, Name: string; Value: TStream);
procedure WriteDate(const Section, Name: string; Value: TDateTime);
procedure WriteDateTime(const Section, Name: string; Value: TDateTime);
procedure WriteFloat(const Section, Name: string; Value: Double);
procedure WriteTime(const Section, Name: string; Value: TDateTime);