Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#13

AW: Mit savetoFile/loadfromFile Daten ins Formular bringen

  Alt 26. Nov 2018, 20:04
Hmm..

Delphi-Quellcode:
rocedure TForm1.ladenClick(Sender: TObject);
var Names:TName;
begin
  Names:=TName.create; // Wieso ein NEUES machen..
  try
    FDatalist.LoadFromFile('e:\test\daten.dat');
    Names := FDatalist.Items[0] as TName; // ... Es wird doch aus der Liste geholt und dass NEUE ins Nirvana geschickt..
    Edit1.text:=inttostr(Names.ID);
    Edit2.Text:=Names.Name;
    Edit3.text:=Names.Herkunft;
    CheckBox1.Checked:=Names.Geschlecht;
  finally
    FreeAndNil(Names); // Und hier wird sogar das aus der Liste gleich gekillt
  end;
end;
Also gleich richtig machen..

Oben in der Form kannst Du bei

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    var FDataList:TMyobjectlist;

  public
das 'var' löschen...

füge dort noch hinzu

Delphi-Quellcode:
 private
    { Private-Deklarationen }
    FDataList:TMyobjectlist;
    FAktuelerIndex : integer; //<-- Index des aktuellen Satzes
    procedure ZeigeDaten;
  public

und noch das:

Delphi-Quellcode:
 
procedure TForm1.ZeigeDaten;
var
  Names:TName;
begin
  // holen des aktuellen Satzes aus der Liste und Anzeigen
  Names := FDatalist.Items[FAktuelerIndex] as TName;
  Edit1.text:=inttostr(Names.ID);
  Edit2.Text:=Names.Name;
  Edit3.text:=Names.Herkunft;
  CheckBox1.Checked:=Names.Geschlecht;
end;
dein laden sieht dann so aus:

Delphi-Quellcode:
procedure TForm1.ladenClick(Sender: TObject);
begin
  FDatalist.LoadFromFile('e:\test\daten.dat'); // Laden der Liste
  FAktuelerIndex := 0; // Auf ersten Datensatz setzen
  ZeigeDaten; //Anzeigen
end;
Jetzt nur noch ein Button für Vor:
Delphi-Quellcode:
procedure TForm1.ButtonVorClick(Sender: TObject);
begin
  inc(FAktuelerIndex); // Nächster Datensatz
  if FAktuelerIndex >= FDatalist.Count then
    FAktuelerIndex := 0; // Wieder von vorne beginnen, wenn bereits letzter gewesen
  ZeigeDaten;
end;
und eine für Zurück
Delphi-Quellcode:
procedure TForm1.ButtonRueckClick(Sender: TObject);
begin
  inc(FAktuelerIndex, -1); // Vorheriger Datensatz
  if FAktuelerIndex < 0 then
    FAktuelerIndex := FDatalist.Count-1; // Wieder vom letzten beginnen, wenn bereits am Anfang
  ZeigeDaten;
end;
Und schon kannst DU durch die Datensätze navigieren...

Jetzt noch dein speichern reparieren:

Delphi-Quellcode:
procedure TForm1.speichernClick(Sender: TObject);
var Names: TName;
begin
  Names:=TName.create; // Neues Object erstellen
  try
    // Daten aus Controls holen
    Names.ID:=strtoint(Edit1.text);
    Names.Name:=edit2.text;
    Names.Herkunft:=Edit3.text;
    Names.Geschlecht:=checkBox1.Checked;
    FDatalist.Add(Names); // An die Liste Anhängen
    FDatalist.SaveToFile('e:\Test\daten.dat'); // Speichern

    FAktuelerIndex := FDatalist.Count-1; // Auf den letzten Datensatz setzen

    ZeigeDaten; // Könnte man auch sparen, nur zur Sicherheit ;)
  finally
// FreeAndNil(Names); // <- NICHT löschen!!! Denn das Object ist ja in der Liste !!!
  end;
end;
und noch einen Button für einen Leeren Datensatz
Delphi-Quellcode:
procedure TForm1.ButtonLeerClick(Sender: TObject);
begin
  init;
  FAktuelerIndex := -1; // Auf nicht Vorhandenen Datensatz setzen
end;
Um den aktuellen Datensatz aus der Liste zu löschen genügt ein weiterer Button:

Delphi-Quellcode:
procedure TForm1.ButtonLoeschenrClick(Sender: TObject);
begin
  FDatalist.Delete(FAktuelerIndex); // Aktuellen Datensatz aus Liste löschen
  FAktuelerIndex := 0; // Auf ersten Satz setzen
  ZeigeDaten;
end;
Was jetzt noch fehlt sind Sicherheitsüberprüfungen beim Laden/ZeigeDaten wenn die Liste leer ist...
Aber etwas musst Du ja auch noch machen....

(Aus dem Kopf ohne Delphi herunter getippt, also keine Garantie auf Fehlerfreiheit )
  Mit Zitat antworten Zitat