![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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