Aufbau einer Ini-Datei
**************************************************
Eine Ini-Datei enthält keine oder mehr Sections, die wiederrum keine oder mehr
Identities und dazugehörige Werte enthalten.Die keine Variante ist natürlich
nicht sinnvoll...es sollen ja schließlich Daten gespeichert werden.Bei der
Speicherung werden die Variablentypen nicht mitgespeichert!
Baim auslesen treten jedoch fehler auf, wenn man versucht "wert1" in eine
Integervarible zu befördern... Hier ist die Ini-Datei wie sie bei diesem Beispiel
erzeugt wird.
[SectionA] <-- Section
ID1=wert1 <-- Identity mit Stringwert
ID2=wert2
[SectionB]
ID1= wert1
[SectionI1]
INT1=-100 <-- Identity mit integerwert
INT2=200
[SectionI2]
INT1=10
[Sectionboolean]
Stonecold=1 <-- Identity mit booleanwert/integerwert
is=0 <-- 0=false 1=true
toohot=1
[extrasection]
flaot=1,2345
time=00:00:00
date=03.01.38
datetime=03.01.38
Vorbereitung
**************************************************
1)Auslesen des Pfades zur ini-Datei im onshow-ereignis des Forumlars:
procedure TForm1.FormShow(Sender: TObject);
begin
inipath:=changefileext(application.ExeName,'.ini');
// z.B:'c:\delphi\projects\faq\project1.ini'end;
2)Die unit Inifiles muss eingebunden werden, um mit den Inidateien arbeiten zu können.
Speichern
**************************************************
procedure TForm1.speichernClick(Sender: TObject);
var ini : Tinifile;
a1,a2,a3 : string; //deklaration unserer
b1,b2,b3 : integer; //variablen, die wir in die ini
c1,c2,c3 : boolean; //speichern
vardatetime : Tdatetime; //wollen
ext : extended;
begin
a1:='wert1'; //initialisierung der Variablen
a2:='wert2'; //die wir in die ini schreiben wollen
a3:=' wert1 ';
b1:=-100; //ich hab die hier reingeschreiben, aber
b2:=10; //es können natürlich auch globale variablen sein
b3:=200;
c1:=true;
c2:=false;
c3:=true;
ext:=1.2345;
vardatetime:=123456;
ini:=Tinifile.create(inipath); //die inidatei wird geöffnet bzw. erstellt, wenn sie nicht in unserem inipath ist
try //um fehlern vorzubeugen benutzen wir ein try finally end; konstrukt.
ini.WriteString('SectionA','ID1',a1);//schreiben des wertes a1 in die Identity ID1 in SectionA
ini.WriteString('SectionA','ID2',a2);
ini.WriteString('SectionB','ID1',a3);
ini.WriteInteger('SectionI1','INT1',b1);
ini.WriteInteger('SectionI2','INT1',b2);
ini.WriteInteger('SectionI1','INT2',b3);
ini.WriteBool('Sectionboolean','Stonecold',c1);
ini.WriteBool('Sectionboolean','is',c2);
ini.WriteBool('Sectionboolean','toohot',c3);
ini.WriteFloat('extrasection','flaot',ext); //weitere writeproceduren
ini.WriteTime('extrasection','time',vardatetime);
ini.WriteDate('extrasection','date',vardatetime);
ini.WriteDateTime('extrasection','datetime',vardatetime);
finally
ini.free;
ini:=nil;
end;
end;
Laden
**************************************************
procedure TForm1.ladenClick(Sender: TObject);
var ini : Tinifile;
a1,a2,a3 : string; //deklaration unserer
b1,b2,b3 : integer; //variablen, die wir in die ini
c1,c2,c3 : boolean; //speichern
vardatetime : Tdatetime; //wollen
ext : extended;
begin
ini:=Tinifile.create(inipath);
try
a1:=ini.readString('SectionA','ID1','');// falls ein fehler auftritt wird der dritte
// Parameter in a1 eingetragen
a2:=ini.readString('SectionA','ID2','');
a3:=ini.readString('SectionB','ID1','');
b1:=ini.readInteger('SectionI1','INT1',0);// 0 ist auch hier der defaultwert
b2:=ini.readInteger('SectionI2','INT1',0);
b3:=ini.readInteger('SectionI1','INT2',0);
c1:=ini.readBool('Sectionboolean','Stonecold',true);
c2:=ini.readBool('Sectionboolean','is',true);
c3:=ini.readBool('Sectionboolean','toohot',true);//wie schon erwähnt führt eine 0 in der
//ini-Datei zu c3=false und eine 1 zu c3=true, wenn ein fehler auftritt wird true zurückgeliefert
ext:=ini.readFloat('extrasection','flaot',ext);//ext bleibt wie es ist, wenn ein fehler auftritt
vardatetime:=ini.readTime('extrasection','time',0);
vardatetime:=ini.readDate('extrasection','date',0);
vardatetime:=ini.readDateTime('extrasection','datetime',0);
finally
ini.free;
ini:=nil;
end;
end;
Löschen
**************************************************
procedure TForm1.loschenClick(Sender: TObject);
var ini : Tinifile;
begin
ini:=Tinifile.create(inipath);
try // vorherige überprüfung um fehler beim löschen zu vermeiden
if ini.SectionExists('SectionA') then ini.EraseSection('SectionA');//eine section wird gelöscht...
if ini.SectionExists('extrasection') then ini.EraseSection('extrasection');//nochmal
if ini.ValueExists('Sectionboolean','is') then ini.DeleteKey('Sectionboolean','is');//eine Identity wird gelöscht
finally
ini.free;
ini:=nil;
end;
end;