![]() |
Edit.text aus einer ini lesen
Hallo erstmal :P
Also mein Problem ist folgendes: Ich habe eine Ini-Datei. Mit immer einer Section und 2 Strings in der Section. Also: Zitat:
Nun mein Problem: Ich möchte die beiden Strings (je nachdem welche Section in der Combobox gewählt ist) in Edit1.Text und Edit2.Text lesen. Aber der Benutzer soll die Liste auch selbstständig erweitern können. Freue mich über jeden Denkanstoss oder Hilfestellung :P Danke schonmal fürs lesen :zwinker: |
Re: Edit.text aus einer ini lesen
Einfach mit TIniFile.ReadString()
Ich würde aber eine ComboBox statt Edit verwenden |
Re: Edit.text aus einer ini lesen
Hm, also so hab ich es auch probiert, aber wenn der Benutzer es selbst erweitert kann man das ja nichtmehr auslesen, weil es dann ja eine neue Section ist. Oder sehe/denke ich da grade etwas falsch?
|
Re: Edit.text aus einer ini lesen
Der soll also 2 Strings in neue/vorhandene Section schreiben ? Wenn die Section neu ist, dann muss das Programm das ja auch wissen. Also : Section schreiben und dann die zwei Strings. Zeige mal den bereits vorhandenen Quelltext.
|
Re: Edit.text aus einer ini lesen
Schau Dir mal die Hilfe zu TIniFile.ReadString / WriteString an.
Du hast warscheinlich die Liste der Combobox mit ReadSection eingelesen? Beim Schreiben gehst Du so vor: Section löschen (EraseSection? musst in der Hilfe schauen), dann in einer Schleife alle Listenwerte der ComboBox mit WriteString schreiben. Da in etwa so vorgehen (ungetestet)
Delphi-Quellcode:
Direct wieder einlesen müsste so gehen:
for i := 0 to ComboBox.Items.Count-1 do
IniFile.WriteString('MySection', 'Value'+IntToStr(i), ComboBox.Items[i]) IniFile.ReadSection('MySection', ComboBox.Items); Das war nix ;) |
Re: Edit.text aus einer ini lesen
Also bisher habe ich zum einlesen Der Sections in die Combobox das hier:
Delphi-Quellcode:
und dann zum einlesen der Daten:
procedure TForm1.FormCreate(Sender: TObject);
begin rlini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Realmlisten.ini')); try rlini.ReadSections(ComboBox2.Items); finally rlini.Free; end; end;
Delphi-Quellcode:
(es geht dann noch weiter mit 1,2,3, etc.)
procedure TForm1.ComboBox2Change(Sender: TObject);
begin rlini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Realmlisten.ini')); case Combobox2.ItemIndex of 0: try Edit1.Text := rlini.ReadString('Offi','Realmlist',''); Edit2.Text := rlini.ReadString('Offi','Patchlist',''); finally rlini.free; end; Aber wenn der Benutzer ja was hinzufügt müsste das irgendwie auch automatisch weiter ausgelesen werden, so müsste ich es ja manuell dazuschreiben. |
Re: Edit.text aus einer ini lesen
Zitat:
|
Re: Edit.text aus einer ini lesen
Das Geschriebene is ja schon da ^^
Also die Sections 1-4 sind schon da und fertig zum auslesen, aber wenn jetzt zb jemand Section 5 hinzufügt wollte ich, dass es dann ausgelesen wird (in die Combobox kommt es ja durch readsections) aber in das edit feld wird das dann ja nich geladen. Is etwas kompliziert zu erklären und ich hab es womöglich auch etwas ungeschickt umschrieben :P |
Re: Edit.text aus einer ini lesen
Ah, Ok... hatte Deien Aufgabenstellung zu ungenau gelesen.
Du hast eine ComboBox mit allen Sections und zwei Edits mit je einem Eintrag für die aktuell gewählte Section? |
Re: Edit.text aus einer ini lesen
Genau
|
Re: Edit.text aus einer ini lesen
Hallo gasty,
kannst Du das nicht ohne eine Ini-Datei machen? Einfach mit:
Delphi-Quellcode:
ComboBox1.Items.SaveToFile(FileName)
Delphi-Quellcode:
Bis bald Chemiker
ComboBox1.Items.LoadFromFile(FileName)
|
Re: Edit.text aus einer ini lesen
Damit hätte er ja nur die Sections ohne Werte.
|
Re: Edit.text aus einer ini lesen
Also lesen sollten dann klar sein, Sectionen einlesen hast Du ja schon gemacht.
Dann die Werte bei Bedarf einlesen:
Delphi-Quellcode:
Jetzt wird es etwas unsauber:
// im OnChange... den Index brauchst Du nicht abfragen, da ja die Section schon im Textfeld steht
Edit1.Text := IniFile.ReadString(ComboBox.Text, 'Value1', ''); Edit2.Text := IniFile.ReadString(ComboBox.Text, 'Value2', ''); Wenn jetzt jemand etwas in das Combobox Textfeld eingibt, bleiben die Edits leer, solange die Section nicht existiert. (OnChange wird bei jeder Zeicheneingabe/Listenauswahl aufgerufen) Mit einem Save Button kannst Du dann eine neue Section anlegen. (Siehe oben, nur eben IniFile.WriteString).
Delphi-Quellcode:
Das hässliche: Bei jedem Zeichen wird von IniFile gelesen (gepuffert, aber nicht schön) und die Edits werden immer geleert, wenn man in Combobox was eingibt.
// SaveButton Click
IniFile.WriteString(ComboBox.Text, 'Value1', Edit1.Text); IniFile.WriteString(ComboBox.Text, 'Value2', Edit2.Text); Besser wäre eine Combobox im DropDownList Stil (siehe Objektinspektor) und ein Insert Button. Der ruft ein InputQuery auf (Funktion siehe Hilfe), und fügt dann die neue Section ein. |
Re: Edit.text aus einer ini lesen
Also die Combobox ist schon im DropDownList Modus, werd mal den Code probieren und melde mich dann ;D
|
Re: Edit.text aus einer ini lesen
Nochwas... das IniFile-Objekt brauchst Du eigentlich nicht dauernd neu erzeugen.
Leg die Variable ins Formular (private-Abschnitt) und erzeuge das Objekt in TForm.FormCreate. |
Re: Edit.text aus einer ini lesen
Hm, was genau muss ich ins Private legen?
Delphi-Quellcode:
?
ini,rlini: TiniFile;
Und im Form Create hab ich
Delphi-Quellcode:
Aber irgendwie führt es zu einem Error. Kann es vielleicht an den 2 Ini-Files liegen?
ini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Pfad.ini'));
rlini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Realmlisten.ini')); In der einen ist der Pfad gespeichert und in der anderen die Daten. Aber das mit dem ins Edit auslesen klappt :D Und zum speichern, ich wollte das so machen: *Button klick* Neues Formular wird aufgerufen mit Edits zum eingeben der Daten. dann ini.writestring Aber wird dann nich alles überschrieben? Oder einfach ans Ende hinzugefügt? |
Re: Edit.text aus einer ini lesen
Zitat:
Welcher Fehler kommt denn bei den beiden Inis? |
Re: Edit.text aus einer ini lesen
Ini.WriteString schreibt dort, wo Du angibst [Section] -> Identifier.
Wenn eines von beiden nicht existiert, wird ein neuer Wert eingetragen, ansonsten halt überschrieben. €: IniFiles
Delphi-Quellcode:
genau, das legst Du so ab und erzeugst die Objekte wie oben beschrieben. Jetzt musst Du noch schauen, das auch auf die beiden Variablen zugegriffen wird. Falls also vom vorherigen Code noch irgendwo anders (z.B. lokal in einer Procedure) ini/rlini angelegt ist, das entfernen.
ini,rlini: TiniFile;
|
Re: Edit.text aus einer ini lesen
Irgendwie gibt das bei mir immer einen Access Violation Error.
Aber egal, ich lass es so wie es ist, es funktioniert :D Und das Thema ist ja Edit.text aus ini auslesen und das geht ja jetzt. Danke an alle die geholfen haben :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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