Help with TIniFile!

  • Themenstarter Themenstarter Chefprog
  • Beginndatum Beginndatum
C

Chefprog

HI!
Ich wuesste gerne ob TIniFile unter Delphi das Richtige für meine Zwecke ist: Ich will in einer Datei mehrere Begriffe speichern und zu jedem Begriff noch ein paar Informationen. Er soll in Delphi die ganzen Begriffe anzeigen, und wenn man drauf klickt, soll er die Informationen dazu auch anzeigen oder verwerten. ISt TINiFile das richtige? unde Wenn jua, wie benutze ich es?
Wenn es nicht das richtige is, was mache ich dann?:confused:
Kann mir Irgendjemand helfen???????

:( :( :( Chefprog:( :( :( :(
 
Hi Chefprog,
eine Ini Datei wird für deine Zwecke vollkommen ausreichen.

Code:
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;

Und vergiss nicht IniFiles oben in Uses einzutragen.
Viel Spaß beim rumprobieren:-)
 
Zurück