Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Edit-Felder in Stringliste speichern (https://www.delphipraxis.net/119965-edit-felder-stringliste-speichern.html)

Thomas F 3. Sep 2008 21:02


Edit-Felder in Stringliste speichern
 
Ich möchte 10 Edit-Felder in einer Stringliste speichern. :-D
Das soll eine Eingabe-Maske werden, und beim Neustart sollen die Felder wieder mit den Einträgen (von der Stringlist)gefüllt werden. 8)
Problem ist wenn ein oder mehrere Edits leer bleiben, dann erhält man immer eine Exception :

"Listenindex überschreitet das Maximum"

Delphi-Quellcode:

procedure TForm4.Button1Click(Sender: TObject);
var i:Integer;
begin
for i :=0 to ComponentCount -1 do
begin
  if Components[i] is TEdit then Stringliste.Strings[i]:= TEdit(Components[i]).Text;
end;
 Stringliste.SaveToFile('TEST.txt');
Form4.Close;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
    Stringliste := TSTringlist.Create;
   
end;
Weiss jemand, wie man das am besten macht ? :corky:

grenzgaenger 3. Sep 2008 21:07

Re: Edit-Felder in Stringliste speichern
 
dann nimm doch einfach ein stringgrid :-)

taaktaak 3. Sep 2008 21:07

Re: Edit-Felder in Stringliste speichern
 
Warum nicht TStringList.Add() ?

// edit: Was soll denn eigentlich
Delphi-Quellcode:
TEdit(Components[i];
bewirken????

grenzgaenger 3. Sep 2008 21:10

Re: Edit-Felder in Stringliste speichern
 
weil das wieder 'n typische :glaskugel: geschichte ist ...

grenzgaenger 3. Sep 2008 21:10

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
Warum nicht TStringList.Add() ?

// edit: Was soll denn eigentlich
Delphi-Quellcode:
TEdit(Components[i];
bewirken????

einen syntax error ;-)

Thomas F 3. Sep 2008 21:14

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
Warum nicht TStringList.Add() ?

// edit: Was soll denn eigentlich
Delphi-Quellcode:
TEdit(Components[i];
bewirken????

ist mir ein Fehler passiert
Delphi-Quellcode:
TEdit(Components[i]).text

taaktaak 3. Sep 2008 21:17

Re: Edit-Felder in Stringliste speichern
 
Ok!
Men Vorschlag:
Delphi-Quellcode:
// ..
for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then StringList.Add(TEdit(Components[i]).Text);
// ..

// edit: Gibt es die StringListe überhaupt?

Thomas F 3. Sep 2008 21:18

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
Ok!
Men Vorschlag:
Delphi-Quellcode:
// ..
for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then StringList.Add(TEdit(Components[i]).Text);
// ..

Funktioniert aber nicht, wenn ein Edit leer bleibt, dann gibts Exception.

grenzgaenger 3. Sep 2008 21:20

Re: Edit-Felder in Stringliste speichern
 
die frage ist doch auch, was "stringliste" in seinem code ist .. und was sie macht...

grenzgaenger 3. Sep 2008 21:21

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von Thomas F
Zitat:

Zitat von taaktaak
Ok!
Men Vorschlag:
Delphi-Quellcode:
// ..
for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then StringList.Add(TEdit(Components[i]).Text);
// ..

Funktioniert aber nicht, wenn ein Edit leer bleibt, dann gibts Exception.

und welche exception gibt es bspw. :glaskugel:

taaktaak 3. Sep 2008 21:23

Re: Edit-Felder in Stringliste speichern
 
Also bei mir nicht.
Hab's mit 3 Edits versucht, eines davon ist leer.

Thomas F 3. Sep 2008 21:29

Re: Edit-Felder in Stringliste speichern
 
Okay

Aber wie schreib ich das beim Programmstart,
wenn die Stringlist die Strings in die Edit-Felder schreibt,
und einige Felder leer sind ?

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
Stringliste.LoadFromFile('TEST.txt');
 .....
end;

grenzgaenger 3. Sep 2008 21:32

Re: Edit-Felder in Stringliste speichern
 
wie meinst du das? :glaskugel:

poste doch endlich mal etwas mehr code... als die verstümmtelten fragemente, mit dennen man nix anfangen kann ...

Thomas F 3. Sep 2008 21:34

Re: Edit-Felder in Stringliste speichern
 
Die Strings werden gespeichert und beim Programmstart werden dieselben Werte
wieder in die Edits eingfügt.
Praktisch umgekehrt

grenzgaenger 3. Sep 2008 21:34

Re: Edit-Felder in Stringliste speichern
 
und wie machst du das? :glaskugel:

mkinzler 3. Sep 2008 21:35

Re: Edit-Felder in Stringliste speichern
 
Wasch mich, mach mich aber nicht nass ... :gruebel:

Thomas F 3. Sep 2008 21:37

Re: Edit-Felder in Stringliste speichern
 
Ich meine, wie werden die Strings wieder in den Edits angezeigt ?

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
Stringlist.LoadFromFile('TEST.txt');
 Edit1.Text:= Stringliste.Strings[0];
 Edit2.Text:= Stringliste.Strings[1];
.
.
.
.
 
end;

grenzgaenger 3. Sep 2008 21:38

Re: Edit-Felder in Stringliste speichern
 
und wo taucht der fehler auf?

taaktaak 3. Sep 2008 21:41

Re: Edit-Felder in Stringliste speichern
 
Funktioniert das Speichern denn jetzt?

Thomas F 3. Sep 2008 21:42

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
Funktioniert das Speichern denn jetzt?

Speichern funktioniert, aber das Laden nicht.
Wenn man in der Eingabemaske was veränder will ,
müssen die Werte doch wieder erscheinen

grenzgaenger 3. Sep 2008 21:45

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von grenzgaenger
und wo taucht der fehler auf?


taaktaak 3. Sep 2008 21:47

Re: Edit-Felder in Stringliste speichern
 
hm...
Hast du überprüft, das in der Stringliste nach dem Laden der Datei auch was drin ist?

grenzgaenger 3. Sep 2008 21:49

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
hm...
Hast du überprüft, das in der Stringliste nach dem Laden der Datei auch was drin ist?

taaktaak, lass ihn doch erst mal sagen, wo der fehler kommt... und was das für einer eigentlich ist...

hab keine lust auf kaffeesatzlesen...

aber zwischenzeitlich eine vermutung.. du wohl auch ;-)

Thomas F 3. Sep 2008 21:49

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von grenzgaenger
Zitat:

Zitat von grenzgaenger
und wo taucht der fehler auf?


Ich habs doch gesagt , wenn die Strings wieder in die Edits geladen werden

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
Stringlist.LoadFromFile('TEST.txt');
Edit1.Text:= Stringliste.Strings[0];
Edit2.Text:= Stringliste.Strings[1];
.
.
.
.
Edi10.Text := Stringlist.Strings[9];
end;
wenn z.B. der String
Delphi-Quellcode:
Stringliste.Strings[1]:=''
dann gibts eine Exception

mkinzler 3. Sep 2008 21:51

Re: Edit-Felder in Stringliste speichern
 
Das wäre mir neu. Wie sieht den die Textdatei aus?

grenzgaenger 3. Sep 2008 21:51

Re: Edit-Felder in Stringliste speichern
 
davon gibts keine exception...!!!!

was gibts denn für eine? hab ich hier schon mind. 5 mal gefragt.. ein wenig mitarbeiten könntest du auch, wenn wir dir schon beim lösen DEINES problems helfen sollen ...

Thomas F 3. Sep 2008 21:58

Re: Edit-Felder in Stringliste speichern
 
Bei mir gibts ne Exception

Listenindex überschreitet das Maximum(3) , wenn nur ein Edit-Feld ausgefüllt wurde

in der TEST.txt stehen die Werte , die ich eingegeben habe ,
Aber nur beim Neustart des Programms gibts die Exception.

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
Stringliste.LoadFromFile('TEST.txt');
 Edit2.Text:= Stringliste.Strings[1];
 Edit3.Text:= Stringliste.Strings[2];
 Edit5.Text:= Stringliste.Strings[4];
 Edit1.Text:= Stringliste.Strings[0];
 Edit10.Text:= Stringliste.Strings[9];
.
.
.
.
end;

grenzgaenger 3. Sep 2008 21:59

Re: Edit-Felder in Stringliste speichern
 
gut. mit dieser meldung kann man was anfangen...

wie viele einträge hast du denn in deiner text datei? theoretisch müssten es drei sein, da die meldung kommt, .. (3) --> 4 listeintrag.

mkinzler 3. Sep 2008 22:01

Re: Edit-Felder in Stringliste speichern
 
Mit wie meinte ich die Anzahl der Zeilen. Es existieren dort weniger Zeilen, als du auslesen willst

Thomas F 3. Sep 2008 22:03

Re: Edit-Felder in Stringliste speichern
 
in der Textdatei steht nur eine Zeile

Debugger Exception ....Exception der Klasse EStringListError

Ja, wahrscheinlich liegt es daran, dass weniger Zeilen existieren, als ich auslesen will

Das kommt daher, wenn nicht alle Edit-Felder ausgefüllt sind.

wenn alle Edits einen Eintrag haben, gibts keine Exception

taaktaak 3. Sep 2008 22:07

Re: Edit-Felder in Stringliste speichern
 
Also noch mal:
Auch leere Edits werden gespeichert.
Dann steht in der Datei nur 0D0A für diese Zeile.
Ebenso werden leere Zeilen wieder eingelesen.

grenzgaenger 3. Sep 2008 22:09

Re: Edit-Felder in Stringliste speichern
 
du kannst halt nur die zeilen zuweisen, welche du hast...

musst halt sicherstellen, dass deine textdatei immer alle werte aufweisen oder bei der laufzeit entsprechend validieren... :-)

Delphi-Quellcode:
for i := 0 to sl.count -1 do
  (findcomponent(myEdit+inttostr(i)) as tEdit).text := sl.strings[i];

grenzgaenger 3. Sep 2008 22:11

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von taaktaak
Also noch mal:
Auch leere Edits werden gespeichert.
Dann steht in der Datei nur 0D0A für diese Zeile.
Ebenso werden leere Zeilen wieder eingelesen.

in diesem falle, wäre aber die zeile in SL assigned.. und würde eben auf '' gesetzt ...

aber das kann er ja einfach mit einem hexeditor prüfen :-) und auch mit dem debugger.. kurz zuvor auf die fehlerstelle setzen und dan mit F7, F8 durchsteppen und sich dabei die wichtigsten variablen ansehen... :-)

Thomas F 3. Sep 2008 22:27

Re: Edit-Felder in Stringliste speichern
 
Diesen Code hab ich probiert, keine Exception, aber auch keine Strings :cry:
obwohl die TEST-Datei gefüllt ist
Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
var K: Integer;  myEdit:String;
begin
Stringlist.LoadFromFile('TEST.txt');

  for K := 0 to stringlist.count -1 do
  (findcomponent(myEdit+inttostr(k)) as TEdit).text := stringlist.strings[k];
end;

Thomas F 4. Sep 2008 08:16

Re: Edit-Felder in Stringliste speichern
 
Ich habs nochmal ausführlich getestet, nur wenn die Datei 'Test.txt' noch nicht existiert oder

0 kb hat, also völlig leer ist dann gibts ne Exception

Delphi-Quellcode:
if not FileExists ('Test.txt') Then filecreate('Test.txt')..........
ändert leider auch nichts

mkinzler 4. Sep 2008 08:20

Re: Edit-Felder in Stringliste speichern
 
Dass Problem ist das eine leere Datei immer noch keine Zeilen hat. Wenn du diese einliest hat die StringListe 0 Zeilen. Wenn du dann auf irgendeinen der Strings zugreifen willst knallt es halt. Du musst die Anzahl der Zeilen abfragen

DeddyH 4. Sep 2008 08:22

Re: Edit-Felder in Stringliste speichern
 
Wenn Datei existiert, dann:
- Stringliste aus Datei befüllen
- zur Kontrolle Zeilen zählen
- Text den Edits zuweisen

[edit] Mal wieder zu spät *grmpf* [/edit]

Thomas F 4. Sep 2008 08:25

Re: Edit-Felder in Stringliste speichern
 
Zitat:

Zitat von DeddyH
Wenn Datei existiert, dann:
- Stringliste aus Datei befüllen
- zur Kontrolle Zeilen zählen
- Text den Edits zuweisen

[edit] Mal wieder zu spät *grmpf* [/edit]

Komischerweise, wenn die Datei 1 kb hat, aber überhaupt nichts drinsteht,

optisch völlig leer ist , gibts keine Exception

wenn die Datei 0 kb hat gibts ne Exception,

da steht unsichtbar irgendwas drin.

DeddyH 4. Sep 2008 08:30

Re: Edit-Felder in Stringliste speichern
 
Dann stehen vermutlich nur Zeilenumbrüche drin und die sieht man normalerweise nicht.

Thomas F 4. Sep 2008 08:32

Re: Edit-Felder in Stringliste speichern
 
Ich hab die Lösung gefunden

Delphi-Quellcode:
if Stringlist.Count = AnzahlEdits -1 then
begin

Stringlist.LoadFromFile('Test.txt')......................


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.
Seite 1 von 2  1 2      

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