Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit.text aus einer ini lesen (https://www.delphipraxis.net/129989-edit-text-aus-einer-ini-lesen.html)

gasty 1. Mär 2009 10:16


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:

[Section1]
String1= blabla
String2= blub
[Section2]
...
Und bisher habe ich erfolgreich geschafft die Sections in Combobox.Items zu laden :mrgreen:
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:

mkinzler 1. Mär 2009 10:21

Re: Edit.text aus einer ini lesen
 
Einfach mit TIniFile.ReadString()
Ich würde aber eine ComboBox statt Edit verwenden

gasty 1. Mär 2009 10:23

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?

Hansa 1. Mär 2009 11:10

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.

Satty67 1. Mär 2009 11:12

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:
for i := 0 to ComboBox.Items.Count-1 do
  IniFile.WriteString('MySection', 'Value'+IntToStr(i), ComboBox.Items[i])
Direct wieder einlesen müsste so gehen:
IniFile.ReadSection('MySection', ComboBox.Items);

Das war nix ;)

gasty 1. Mär 2009 11:19

Re: Edit.text aus einer ini lesen
 
Also bisher habe ich zum einlesen Der Sections in die Combobox das hier:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  rlini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Realmlisten.ini'));
  try
    rlini.ReadSections(ComboBox2.Items);
  finally
    rlini.Free;
  end;
end;
und dann zum einlesen der Daten:
Delphi-Quellcode:
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;
(es geht dann noch weiter mit 1,2,3, etc.)
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.

Hansa 1. Mär 2009 11:23

Re: Edit.text aus einer ini lesen
 
Zitat:

Zitat von gasty
...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.

Ja sicher muss das auch geschrieben werden. Ich seh nur was von lesen. :shock: Wie soll denn sonst was richtig ausgelesen werden, ohne dass es vorher geschrieben wird ??

gasty 1. Mär 2009 11:30

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

Satty67 1. Mär 2009 11:31

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?

gasty 1. Mär 2009 11:34

Re: Edit.text aus einer ini lesen
 
Genau

Chemiker 1. Mär 2009 11:44

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:
ComboBox1.Items.LoadFromFile(FileName)
Bis bald Chemiker

DeddyH 1. Mär 2009 11:47

Re: Edit.text aus einer ini lesen
 
Damit hätte er ja nur die Sections ohne Werte.

Satty67 1. Mär 2009 11:49

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:
// 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', '');
Jetzt wird es etwas unsauber:

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:
// SaveButton Click
IniFile.WriteString(ComboBox.Text, 'Value1', Edit1.Text);
IniFile.WriteString(ComboBox.Text, 'Value2', Edit2.Text);
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.

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.

gasty 1. Mär 2009 12:00

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

Satty67 1. Mär 2009 12:04

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.

gasty 1. Mär 2009 12:16

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:
  ini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Pfad.ini'));
  rlini:= Tinifile.Create((ExtractFileDir(Application.Exename)+'\Realmlisten.ini'));
Aber irgendwie führt es zu einem Error. Kann es vielleicht an den 2 Ini-Files liegen?
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?

Matze 1. Mär 2009 12:21

Re: Edit.text aus einer ini lesen
 
Zitat:

Zitat von gasty
dann ini.writestring
Aber wird dann nich alles überschrieben? Oder einfach ans Ende hinzugefügt?

Das kommt auf die Parameter an, die du übergibst. Wenn der Section-Name und der Wert bereits existieren, wird überschrieben, sonst nicht.

Welcher Fehler kommt denn bei den beiden Inis?

Satty67 1. Mär 2009 12:23

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:
ini,rlini: TiniFile;
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.

gasty 1. Mär 2009 12:48

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