Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus TStringList laden (https://www.delphipraxis.net/62923-aus-tstringlist-laden.html)

Martin.Ghosts 11. Feb 2006 15:13


Aus TStringList laden
 
Der Titel ist nich optimal formuliert, mir fiel aber nichts besseres ein.
Hier ein Ausschnitt aus dem Quelltext:
Delphi-Quellcode:
var laden: TStringList;

repeat
  begin
    laden.Strings[i]:=laden.Strings[i+1];
    i:=i+2;
  end;
until(i>laden.Count);
In i steht z.B. Form4.Edit1.Text. Also soll in Form4.Edit1.Text der Inhalt aus laden.Strings[i+1] stehen. Wie kann ich dieses Problem lösen?
Vielen dank schon mal.

malo 11. Feb 2006 15:16

Re: Aus TStringList laden
 
Vielleicht kannst du ja mit Hier im Forum suchenFindComponent was basteln. Allerdings muss ich zugeben, dass ich noch nicht ganz verstanden hab, was du genau machen willst :oops:

Martin.Ghosts 11. Feb 2006 15:22

Re: Aus TStringList laden
 
Ich habe alle Felder eines Formulars in einer txt-Datei gespeichert:

z.B.:
Form4.Edit1.Text /// gibt den Namen des Editfeldes an
120 /// gibt den Inhalt des Editfeldes an
Form4.Edit2.Text
Text
Form4.ComboBox1.Text
Text
usw.


Nun möchte ich alles wieder laden:
Der Inhalt des Editfeldes Form4.Edit1.Text soll lauten 120
usw.

Und zum selbst Zusammenbasteln. Ich habe erst seit einem halben jahr Info. So auf die Schnelle kann ich da nichts machen.

Phistev 11. Feb 2006 15:53

Re: Aus TStringList laden
 
Delphi-Quellcode:
var laden: TStringList;

repeat
  begin
    Form4.FindComponent(laden.Strings[i]).Text:=laden.Strings[i+1];
    i:=i+2;
  end;
until(i>laden.Count);
Lass nur das .Text in der txt weg

/edit: Und das Form4 besser auch

Martin.Ghosts 11. Feb 2006 16:50

Re: Aus TStringList laden
 
Fogende Fehlermeldung: Undefinierter Bezeichner: 'Text'

Christian Seehase 11. Feb 2006 17:10

Re: Aus TStringList laden
 
Moin Martin,

so könnte es gehen:

Delphi-Quellcode:
var laden: TStringList;

repeat
  begin
    (Application.FindComponent(laden[i]) as TEdit).Text:=laden[i+1];
    i:=i+2;
  end;
until(i>laden.Count);
In diesem Falle muss laden[i] (das .Strings hab' ich mal weggelassen, da die Strings als Standardeigenschaft von TStringList deklariert ist, und somit nicht mit angegeben werden muss) in der Form:

<Formularname>.<Editname>

enthalten sein, z.B. Form4.Edit1

Sicherer ist es so:

Delphi-Quellcode:
var
  laden  : TStringList;
  edtWork : TEdit;

repeat
  begin
    edtWork := (Application.FindComponent(laden[i]) as TEdit);
    if edtWork <> nil then edtWork.Text := laden[i+1];
    i:=i+2;
  end;
until(i>laden.Count);
Hier wird erst einmal geprüft, ob das in laden[i] enthaltene Editfeld überhaupt gefunden werden konnte.

Martin.Ghosts 12. Feb 2006 10:30

Re: Aus TStringList laden
 
Bei mir passiert nix. Ich hab jetzt mal was mit showmessages gemacht und da kam folgendes bei rum:
Delphi-Quellcode:
showmessage(laden[i])                                              ///Form4.Edit1
showmessage((Application.FindComponent(laden[i]) as TEdit).Text)   ///nix
Kann damit jemand was anfangen?

Christian Seehase 12. Feb 2006 14:33

Re: Aus TStringList laden
 
Moin Martin,

sorry, Denkfehler von mir :wall:

Wenn Du verschiedene Formulare hast und Felder hast, musst Du den String erst einmal trennen:
(Annahme: Es liegt immer die Aufteilung <Formularname>.<Editname> vor)

Delphi-Quellcode:
var
  frm : TForm;
  edt : TEdit;

begin
  // Nur der Kern der Schleife

  // Gewünschtes Formular ermitteln, dessen Name sollte bis zum . stehen
  frm := Application.FindComponent(copy(laden[i],1,pos('.',laden[i])-1)) as TForm;
  if frm <> nil then begin // Formular gefunden
    // jetzt das Editfeld ermitteln
    edt := frm.FindComponent(copy(laden[i],pos('.',laden[i])+1,MaxInt)) as TEdit;
    if edt <> nil then begin // Edit gefunden
      ShowMessage(edt.Text);
    end;
  end;
end;

Martin.Ghosts 12. Feb 2006 18:56

Re: Aus TStringList laden
 
Tut mir leid wenn ich hier keine Peilung hab. Ich fühl mich schon schlecht weil andere für mich dei Arbeit machen :? vielen Dank noch mal an der Stelle.

hier nochmal der ganze Quelltext:
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);

var laden: TStringList;
    frm: TForm;
    edt: TEdit;
    i: Integer;

begin
  laden:=TStringList.Create();
  Form4.Show;
  if ((FileExists('Tabelle\'+Form1.Button8.Caption+'. '+Form1.ComboBox1.Text+' '+Form1.SpinEdit1.Text+'.'+Form1.ComboBox2.Text+'.txt'))=true) then
    begin
      laden.LoadFromFile('Tabelle\'+Form1.Button8.Caption+'. '+Form1.ComboBox1.Text+' '+Form1.SpinEdit1.Text+'.'+Form1.ComboBox2.Text+'.txt');
      i:=0;
      repeat
        begin
          showmessage('a'+IntToStr(i));
          frm:=Application.FindComponent(copy(laden[i],1,pos('.',laden[i])-1)) as TForm;
          showmessage('b'+IntToStr(i));
          if frm <> nil then
            begin
              showmessage('c'+IntToStr(i));                                           /////nach c6 fehler
              edt:=frm.FindComponent(copy(laden[i],pos('.',laden[i])+1,MaxInt)) as TEdit;
              showmessage('d'+IntToStr(i));
            end;
          i:=i+2;
        end;
      until(i>laden.Count-1);
    end
  else
    begin
      Form4.Edit1.Text:=Form1.Button8.Caption;
      Form4.Caption:=Form4.Edit1.Text+'. '+Form1.ComboBox1.Text+' '+Form1.SpinEdit1.Text;
    end;
  laden.Free;
  Form4.GroupBox1.SetFocus;
  Kaloriensoll;
end;

folgendes steht in der txt-Datei(Anfang):

Form4.ComboBox0

Form4.SpinEdit0

Form4.Edit0

Form4.ComboBox1<-----------------------hier kommt der fehler (c6 s.o.) 'Ungültige Typumwandlung'

Form4.SpinEdit1
100
Form4.Edit1
1


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.

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