AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einträge aus INI-Datei lesen

Ein Thema von ghost1601 · begonnen am 1. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
ghost1601

Registriert seit: 26. Aug 2006
64 Beiträge
 
Delphi 2005 Personal
 
#1

Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 19:14
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
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#2

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 19:20
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.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#3

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 19:21
Hallo,

bei den ReadString fehlt der 2. und 3. Parameter

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

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#4

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 19:51
HAI
has du mal geguckt was beim schreiben in ComboBox4.Text steht?
das scheind mir die kritische Stelle zusein?
Jörg
have FUN
  Mit Zitat antworten Zitat
ghost1601

Registriert seit: 26. Aug 2006
64 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 19:57
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
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 20:02
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
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 20:02
Zitat von ghost1601:
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?

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

Registriert seit: 26. Aug 2006
64 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 20:31
an der Stelle wo das fehlt, ist die Stelle wo gelesen werden soll...im Tutorial steht es so...
bist du dir da sicher?
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Einträge aus INI-Datei lesen

  Alt 1. Mär 2007, 23:48
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.
  Mit Zitat antworten Zitat
ghost1601

Registriert seit: 26. Aug 2006
64 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Einträge aus INI-Datei lesen

  Alt 2. Mär 2007, 12:57
alles klar, Dank deines Vorschlages läuft jetzt alles wie es soll.

Thx
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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