Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einträge aus INI-Datei lesen (https://www.delphipraxis.net/87521-eintraege-aus-ini-datei-lesen.html)

ghost1601 1. Mär 2007 18:14


Einträge aus INI-Datei lesen
 
Hallo,

zu meinem Problem, ich lass je nach Wahl die Einstellungen eines Programms in eine INI-Datei oder in die Windows Registry schreiben.
Delphi-Quellcode:
var regist: TRegistry;
    ini: TIniFile;
begin
if ComboBox4.Text='Windows Registry'
  then
    begin
      regist:=TRegistry.Create(Key_Write);
      regist.RootKey:=HKEY_CURRENT_USER;
      regist.OpenKey('Software\zibolsky-product\Clandatenbank\1.4', true);
      regist.WriteString('Auto-Save', ComboBox1.text);
      regist.WriteString('Browser', ComboBox2.text);
      regist.WriteString('Nav', Combobox3.text);
      regist.WriteString('verzeichnis', ComboBox4.Text);
      regist.free;
    end
  else
    begin
      ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'einstellungen.ini');
      ini.WriteString('Auto-Save','Einstellung', Combobox1.Text);
      ini.WriteString('Browser', 'Browser', ComboBox2.Text);
      ini.WriteString('Navigation', 'Nav', ComboBox3.Text);
      ini.free;

      regist:=TRegistry.Create(Key_Write);
      regist.RootKey:=HKEY_CURRENT_USER;
      regist.OpenKey('Software\zibolsky-product\Clandatenbank\1.4', true);
      regist.WriteString('verzeichnis', ComboBox4.Text);
      regist.free;
      ComboBox4.Text:='INI-Datei';
    end;
end;
Diese Einträge stehen nach dem Schließen des Einstellungsmenüs auch in der angegeben INI, jedoch sollen diese nach einem Neustart des Programms auch wieder dort stehen.
Das hab ich mit folgendem Zeilen versucht.
Delphi-Quellcode:
var regist: TRegistry;
    ini: TIniFile;
    verzeichnis:string;
begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\zibolsky-product\Clandatenbank\1.4', true);
  verzeichnis:=regist.ReadString('verzeichnis');
  regist.free;

if verzeichnis='Windows Registry'
  then
    begin
        regist:=TRegistry.Create;
        regist.RootKey:=HKEY_CURRENT_USER;
        regist.OpenKey('Software\zibolsky-product\Clandatenbank\1.4', true);
        ComboBox1.Text:=regist.ReadString('Auto-Save');
        ComboBox2.Text:=regist.ReadString('Browser');
        ComboBox3.Text:=regist.ReadString('Nav');
        ComboBox4.Text:=regist.ReadString('verzeichnis') ;
        regist.free;
    end
  else
    begin
        ini:=TIniFile.Create('einstellungen.ini');
        ComboBox1.Text:=ini.ReadString('Auto-Save','Einstellung', '');
        ComboBox2.Text:=ini.ReadString('Browser','Browser', '');
        ComboBox3.Text:=ini.ReadString('Navigation', 'Nav', '') ;
        ini.free;
        ComboBox4.Text:=verzeichnis;
    end;
end;
Die Variable "verzeichnis" gibt dabei an welchen Speicherort der Benutzer ausgewählt hat, er wird in der Registry gespeichert.
Wo liegt nun aber das Problem? Es sollten doch alle Einstellungen, die in der INI stehen auch ins Programm geladen werden oder?
Sieht jemand einen Fehler?

Thx

yankee 1. Mär 2007 18:20

Re: Einträge aus INI-Datei lesen
 
Mach das:
ExtractFilePath(ParamStr(0))

Am besten nicht nur beim Speichern, sondern auch beim Laden.

Und: Wenn du dem benutzer die Möglichkeit geben willst in INI statt Registry speichern zu wollen, sit das sehr lobenswert, aber wenn du trotzdem mnoch einen registrykey brauchst verfehlt es den Zweck (wenn du das Prog auf einen usb-Stick lädst und das prog woanders starten willst (die Einstellunngen sind ja in der ini) dann wunderst du dich nämlich ^^. Also das mal nur als Beispiel.

Mach lieber einfach ein fileexists auf die ini und lösche diese, wenn der User gerne die registry benutzen möchte.
Oder schreib eben in die inidatei, dass der user in der registry speichern will.

Fragt sich nur, warum man in der Registry speichern wolloen würde, die 24/7 im RAM gehaltren wird und diesen blockiert, die Registry wegen der steigenden Grösse langsamer macht und den WIndowsstart verlangsamt, wenn mana uch in einer ini speichern kann.

hsbc 1. Mär 2007 18:21

Re: Einträge aus INI-Datei lesen
 
Hallo,

bei den ReadString fehlt der 2. und 3. Parameter

Sorry - habe mich verlesen - sehe hier keine Fehler...

mfg
Herbert

yörsch 1. Mär 2007 18:51

Re: Einträge aus INI-Datei lesen
 
HAI :hi:
has du mal geguckt was beim schreiben in ComboBox4.Text steht?
das scheind mir die kritische Stelle zusein?

ghost1601 1. Mär 2007 18:57

Re: Einträge aus INI-Datei lesen
 
Zitat:

Zitat von yankee
Mach das:
ExtractFilePath(ParamStr(0))

Wo genau soll das hin oder nicht hin?
Thx für deine Tips

@yörsch:
Da stehen jeweils Sachen wie z.B.: An oder Aus drinne...ein Inhalt ist schon vorhanden

oki 1. Mär 2007 19:02

Re: Einträge aus INI-Datei lesen
 
Hi,

gib als Dateinamen für dein IniFile den kompletten Pfad mit an. Wenn du erwartest, dass automatisch das Programmverzeichnis benutzt wird, dann muß ich dich enttäuschen. Wenn's danach noch nicht klappt, dann prüf ob du an anderer Stelle die Inhalte überschreibst. Stepp im Debug-Modus hilft dier hier aber schnell.

Gruß oki

IngoD7 1. Mär 2007 19:02

Re: Einträge aus INI-Datei lesen
 
Zitat:

Zitat von ghost1601
Zitat:

Zitat von yankee
Mach das:
ExtractFilePath(ParamStr(0))

Wo genau soll das hin oder nicht hin?

Du hast den Code oben nur kopiert und nicht selbst geschrieben, oder? :roll:

Das muss beim Lesen der Ini-Datei genau da hin, wo es beim Schreiben auch stand:
Bei ini:=TIniFile.Create(...

ghost1601 1. Mär 2007 19:31

Re: Einträge aus INI-Datei lesen
 
an der Stelle wo das fehlt, ist die Stelle wo gelesen werden soll...im Tutorial steht es so...
bist du dir da sicher?

IngoD7 1. Mär 2007 22:48

Re: Einträge aus INI-Datei lesen
 
Zitat:

Zitat von ghost1601
an der Stelle wo das fehlt, ist die Stelle wo gelesen werden soll...im Tutorial steht es so...
bist du dir da sicher?

Probiere es einfach aus.

Beim Schreiben bewirkt der Teil, dass die Ini ins Programmverzeichnis geschrieben wird. Beim Lesen bewirkt er, dass wieder aus dem Programmverzeichnis gelesen wird. Das ist sonst nicht gewährleistet. Es muss nicht der Fehler sein, aber es kann so sein.

Du kannst ebenso feste Pfade eintragen ... wie auch immer. Aber nur den Dateinamen zu nehmen, ist unsicher. Da ist dann auch das Tutorial nicht soooo toll.

ghost1601 2. Mär 2007 11:57

Re: Einträge aus INI-Datei lesen
 
alles klar, Dank deines Vorschlages läuft jetzt alles wie es soll.

Thx :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz