Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Tstringlist (https://www.delphipraxis.net/177880-problem-mit-tstringlist.html)

Natcree 3. Dez 2013 18:01

Problem mit Tstringlist
 
Habe eine Form mit 2 Buttons und einem Edit.

Mit der Form.create sollen 2 neue Edits erstellt werden

Während der Lauf zeit sollen die Daten in den Edits in eine Datei gespeichert werden.
Über einen 2. Button sollen die Daten eingelesen werden und Button1,2 und Form. caption mit den daten
geändert werden.


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=2;
edit:=Tedit.create(Self);
edit.Name:= 'Edit' + IntToStr(i);
Edit.Text:= Edit.name+'.Text';
Edit.Top:=231;
Edit.Left:=400;
edit.Parent := Self;
i:=i+1;
edit:=Tedit.create(Self);
edit.Name:= 'Edit' + IntToStr(i);
Edit.Text:= Edit.name+'.Text';
Edit.Top:=261;
Edit.Left:=400;
edit.Parent := Self;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s:= TButton(Sender).name;
st := Tstringlist.create;
st.Add(Edit1.text); //Hier klappt es da Edit1 schon vorhanden ist
st.Add(Edit2.text);  //Hier meckert er
st.Add(Edit3.text);  // Hier auch
st.SaveToFile(s+'.ini');
st.free;
end;
Die Daten lesen und als Caption wiedergegeben soll hier passieren

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
st := Tstringlist.create;
st.LoadFromFile('Button1.ini');
Button1.Caption:= st.strings[0];
Form1.Caption:= st.Strings[1];
Button2.Caption:= st.Strings[2];
end;

Natcree 3. Dez 2013 18:09

AW: Problem mit Tstringlist
 
Eins der Beide Treads kann weg Wurde wohl versehentlich 2 mal erstellt

Perlsau 3. Dez 2013 18:23

AW: Problem mit Tstringlist
 
Wo erzeugst du denn Edit2 und Edit3? Ich sehe immer nur, daß du Edit erzeugst, und das sogar zweimal hintereinander.

Woher stammt eigentlich die Fehlermeldung "hier klappt es nicht"? Mein Compiler brachte derart kuriose Fehlermeldungen bislang nicht zustande ... Gewöhnlich erhalte ich vom Compiler ganz konkrete Hinweise, was ich falsch gemacht habe, z.B. "Unbekennter Bezeichner 'Edit'" und dergleichen ... Also mir wäre es schon wichtig zu erfahren, was mein Compiler genau zu meckern hat und nicht nur, daß er meckert ...

Luckie 3. Dez 2013 18:24

AW: Problem mit Tstringlist
 
Warum erstellst du die Steuerelemente zur Laufzeit?

Natcree 3. Dez 2013 18:45

AW: Problem mit Tstringlist
 
Delphi-Quellcode:
edit.Name:= 'Edit' + IntToStr(i);
Edit.Text:= Edit.name+'.Text';
Er erstellt aber zwei Edits. Da die variable um eins hochgezählt wird.

nahpets 3. Dez 2013 18:48

AW: Problem mit Tstringlist
 
Woher soll der Compiler Edits kennen, die Du erst zur Laufzeit erstellst?

Was im Form.Create beim Programmstart gemacht wird, kann der Compiler nicht wissen. Das Form.Create wird zur Laufzeit ausgeführt und nicht beim Kompilieren.

Natcree 3. Dez 2013 18:54

AW: Problem mit Tstringlist
 
Was kann ich da jetzt machen?

nahpets 3. Dez 2013 19:01

AW: Problem mit Tstringlist
 
Da Du den Edits als Parent Self gibt's, kann Du jetzt bei Self nach Komponenten vom Type TEdit suchen und wenn Du dann eine entsprechende Komponente mit dem von Dir gewünschten Namen findest, kannst Du die gefundenen Komponenten als TEdit ansprechen und deren Text dann in die Stringliste übernehmen.

Such' mal in der Hilfe oder im Web nach FindComponent. Damit solltest Du dann Dein "Problem" gelöst bekommen.

Perlsau 3. Dez 2013 19:40

AW: Problem mit Tstringlist
 
Zitat:

Zitat von Natcree (Beitrag 1238404)
Delphi-Quellcode:
edit.Name:= 'Edit' + IntToStr(i);
Edit.Text:= Edit.name+'.Text';
Er erstellt aber zwei Edits. Da die variable um eins hochgezählt wird.

:wiejetzt: Du machst hier folgendes:

Du weist einer Variablen mit Namen Edit (das ist der Name des Objekts, deiner Edit-Komponente) einen neuen Namen zu. Danach weist du dem Text-Property einer Komponente mit dem Namen Edit einen Wert zu, und zwar den Namen dieser Komponente zusätzlich des Strings '.Text'. Was möchtest du denn damit bezwecken? Und weshalb verwendest du den Objektnamen 'Edit' noch einmal, obwohl du ihn zuvor doch umbenannt hast? Damit gibt es das Objekt Edit doch gar nicht mehr, denn das heißt doch jetzt Editwasweißich, je nach Wert der Variablen i.

Ein Edit zur erstellt man zur Laufzeit folgendermaßen:

1. Deklaration: MeinEditFeld : TEdit;
2. Erzeugen: MeinEditFeld := TEdit.Create(Self);

Irgendwie erscheint mir das Ganze einem auffallend konfusen Geist entsprungen ... Vielleicht wäre es doch nicht so verkehrt, mal ein oder zwei Grundlagen-Tutorials durchzuarbeiten, um sich mit der Sprache Delphi vertraut zu machen ...

Natcree 3. Dez 2013 20:00

AW: Problem mit Tstringlist
 
Komischer weise Funktioniert es jetzt. habe den code Ergänzt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
Button:String;
begin
Button:= TButton(Sender).name;
st := Tstringlist.create; //Strinlist erzeugen
st.add(edit1.text);  //Text aus Edit1 einfügen
st.Add(TEdit(FindComponent('Edit'+IntToStr(i-1))).Text);
st.Add(TEdit(FindComponent('Edit'+IntToStr(i))).Text);
st.SaveToFile(Button+'.ini'); //Text speichern
st.free; //Speicher der Stringlist wieder freigeben
end;
Zitat:

Und weshalb verwendest du den Objektnamen 'Edit' noch einmal, obwohl du ihn zuvor doch umbenannt hast?
Perlsau Ich gebe dir recht.... .
Wenn ich Edit nicht umbenenne dann sagt er das 2. Edit kann nicht erstellt werden weil schon vorhanden. Aus diesem Grund gebe ich jedem Edit eine Zahl mit zu. Wie Edit1, edit2, edit3; Es ist mir klar wie mann ein Edit erstellt aber hier geht es nur um ein Beispielprogramm. Und das Problem was ich hatte war die Speicherung und wiedergabe mit einer Tstringlist.Ich habe in einem Anderen Programm vor das der User sich buttons und Edits ....... Zur laufzeit selbst erstellen, verschieben, umbenennen, Verlinkungen setzen....... kann.

Und Danke für den Tip nahpets mit FindComponents hats gut geklappt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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