![]() |
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:
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.
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; Das hab ich mit folgendem Zeilen versucht.
Delphi-Quellcode:
Die Variable "verzeichnis" gibt dabei an welchen Speicherort der Benutzer ausgewählt hat, er wird in der Registry gespeichert.
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; 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 |
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. |
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 |
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? |
Re: Einträge aus INI-Datei lesen
Zitat:
Thx für deine Tips @yörsch: Da stehen jeweils Sachen wie z.B.: An oder Aus drinne...ein Inhalt ist schon vorhanden |
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 |
Re: Einträge aus INI-Datei lesen
Zitat:
Das muss beim Lesen der Ini-Datei genau da hin, wo es beim Schreiben auch stand: Bei ini:=TIniFile.Create(... |
Re: Einträge aus INI-Datei lesen
an der Stelle wo das fehlt, ist die Stelle wo gelesen werden soll...im
![]() bist du dir da sicher? |
Re: Einträge aus INI-Datei lesen
Zitat:
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. |
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 06:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz