![]() |
Problem mit speichern und laden von .ini einträgen
Guten Morgen,
ich beschäftige mich seit kurzem mit ini dateien. Um ein bisschen verständnis zu bekommen schaute ich mir das tutorial bei Delphi treff an. Nun wollte ich eine Anwendung schreiben welche auf einem form eine Combobox und ein Editfeld enthält.Ganz einfach eigentlich. nun gebe ich ins Editfeld etwas ein und es soll in der ini datei gespeichert werden. Es geht um Benutzer. Wenn Diese einträge dann gespeichert worden sind soll man sie in der Combobox auswählen können. 1. Problem: Ich kann nur einen Eintrag speichern.
Delphi-Quellcode:
2. Problem: Es wird nicht in die Combobox geladen..
var
ini: TIniFile; begin ini:= TIniFile.create(ExtractFilePath(ParamStr(0))+ 'Settings.ini'); if edtWriter.Text <> '' then begin ComboBox1.Items.Add(edtWriter.Text); ini.WriteString('Verfasser','Name',edtWriter.Text); ini.free; end; end;]
Delphi-Quellcode:
Was ist der dritte Parameter? würd am liebsten einfach ALL reinschreiben.. : /
ini: TIniFile;
begin ini:= TIniFile.create('Settings.ini'); try Combobox1.ItemIndex := ComboBox1.Items.IndexOf(Ini.ReadString('Verfasser', 'Name', '')); finally ini.free; end; end; Vielen dank im voraus, New |
AW: Problem mit speichern und laden von .ini einträgen
Wo lädst du denn was in die ComboBox?
[add] oder sind die Texte in der ComboBox fest? Wenn ja, dann zerlege doch mal die verschachtelten Befehle und schau nach (Debuggen), was die einzelen Befehle machen/zurückliefern und vergleich das mit dem, was du erwartest, das sie machen sollten. Du sagst nur Lade den einen Namen ( ReadString ), suche diesen in der ComboBox ( IndexOf ) und zeige diesen an, falls er gefunden wurde ( ItemIndex:= ). PS: In der OH steht drin, was der dritte Parameter macht > ![]() PSS: Wenn edtWriter.Text leer ist, dann gibst du, beim Schreiben, die INI nicht mehr frei. |
AW: Problem mit speichern und laden von .ini einträgen
zu PS: hab mich da durchgelesen, aber das kann doch nicht sein dass man jeden Comboboxeintrag angeben muss im quelltext, also dass man nicht einfach alles laden kann, unbestimmte menge sondern vorab sagen muss wie z.B. hier
Delphi-Quellcode:
Das man jedes Item angeben muss.
Top := SettingsFile.ReadInteger(Name, 'Top', Top );
Left := SettingsFile.ReadInteger(Name, 'Left', Left ); Width := SettingsFile.ReadInteger(Name, 'Width', Width ); Height := SettingsFile.ReadInteger(Name, 'Height', Height ); Caption := SettingsFile.ReadString (Name, 'Caption', Caption); zu PPS: also muss ich der ini an einer anderen stelle zusätzlich die möglichkeit geben free zu werden? Danke für die schnelle antwort |
AW: Problem mit speichern und laden von .ini einträgen
Hast Du richtig verstanden - man muß immer den genauen Namen mit angeben. Das bekommst Du mit einer Zeile ReadString in einer Ini also so nicht hin. Ich baue mir für solche Fälle immer einen Count in die Sektion mit ein und der enthält die Anzahl die ich lesen muss. Sieht dann in der Ini z.B. so aus
Code:
Man muss dazu dann den Count auswerten und sich in einer Schleife die Werte holen
[Abschnitt]
Count=3 Wert1=abc Wert2=def Wert3=ghi
Delphi-Quellcode:
ReadString('Abschnitt', 'Wert'+IntToStr(i), '');
Und noch zu dem Free - er kommt bei Dir nicht in jedem Fall dorthin, obwohl Du die ini jedesmal am Anfang erzeugst. Besser wäre es so:
Delphi-Quellcode:
ini:= TIniFile.create(ExtractFilePath(ParamStr(0))+ 'Settings.ini');
try if edtWriter.Text <> '' then begin ComboBox1.Items.Add(edtWriter.Text); ini.WriteString('Verfasser','Name',edtWriter.Text); end; finally ini.free; end; |
AW: Problem mit speichern und laden von .ini einträgen
Danke ich verstehe ;)
Werds gleich mal alles ausprobieren. |
AW: Problem mit speichern und laden von .ini einträgen
Nun ja ganz so schlimm ist es ja nun auch nicht.
Schließlich gibt TIniFile ja auch noch die Methode
Delphi-Quellcode:
und
ReadSection
Delphi-Quellcode:
her.
ReadSectionValues
Damit kann man schon die Inhalte einer ComboBox füllen.
Code:
[Verfasser]
Peter=1 Walter=1 Hans=1
Delphi-Quellcode:
In der ComboBox sind jetzt folgende Einträge
ini.ReadSection( 'Verfasser', ComboBox1.Items );
Code:
Peter
Walter Hans |
AW: Problem mit speichern und laden von .ini einträgen
Verwende generell absolute Pfade. Beim Speichern machst du das, beim Laden nicht. Du weißt daher nicht, in welchem Verzeichnis die Datei gesucht wird (im Arbeitsverzeichnis, was aber nicht dem Programmverzeichnis entsprechen muss).
Also immer absolute Pfade angeben. Dass man im Programmverzeichnis nicht unbedingt Schreibrechte hat, ist dir hoffentlich klar (für portable Programme auf USB-Sticks ist das Verzeichnis jedoch sinnvoll). Daher möchte ich diese immer wiederkehrende Belehrung, wo man (nicht) speichern soll, nicht erneut starten. ;) |
AW: Problem mit speichern und laden von .ini einträgen
INI-Dateien ohne Prad, werden im Windows-Verzeichnis gesucht.
(oder entsprechend in der Virtualisierung des UAC) |
AW: Problem mit speichern und laden von .ini einträgen
Zitat:
Meiner Meinung nach ist es Quatsch, wenn sich relative Pfade auf das Windowsverzeichnis beziehen ... |
AW: Problem mit speichern und laden von .ini einträgen
![]() Zitat:
|
AW: Problem mit speichern und laden von .ini einträgen
zu deinem 1. Problem:
Wenn du einen Eintrag folgendermaßen erstellst:
Delphi-Quellcode:
Dann speicherst du in der INI-Datei folgendes:
ini.WriteString('User','Name',edtName.Text
Code:
Beim nächsten Mal schreibst du aber genau an die gleiche Stelle wieder, also überschreibst du einfach nur.
[User]
Name=[I]edtName.Text[/I] Eine INI ist so aufgebaut:
Code:
Also musst du deinen Key irgendwie änderen, sonst überschreibst du einfach immer nur den Wert des Keys.
[Section]
Key = Value Änderungen könnten z.B. sein, dass du statt Key-->'Name' für Key den Text aus dem Edit nimmst und dem den Wert 1 zuweisst. Oder eben mit einer Zählschleife, die dann immer 'NameN', wobei N eine Zahl ist, schreibt. Da gibts aber unzählige Möglichkeiten. Frohe Weihnachten an alle, hans ditter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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