Besteht mit diesem Konzept auch die Möglichkeit die Daten zu speichern und beim Starten des Programms wieder zu laden? Und WIE genau fülle ich die TObjectList mit den Daten?
Eine Objektliste füllt man mit Daten, indem man ein Objekt erzeugt und der Objektliste hinzufügt (Add). Zurück erhält man den Index des neu hinzugefügten Objekts. Steht übrigens alles in der
Online-Hilfe zu TObjectList ...
Da es sich beim Inhalt des Objekts um reinen Text handelt (auch Datumse kann man als String abspeichern), genügt z.B. eine
CSV-Datei (
Comma
Separated
Values), die man via Stringliste einliest und die einzelnen Strings via DelimitedText voneinander trennt. Eine solche Speichermethode könnte z.B. so aussehen:
Delphi-Quellcode:
Procedure FormMain.Speichern(Const Dateiname : String);
Const
K = ';';
Var
i,z : Integer;
Liste : TStringList;
Begin
Liste := TStringList.Create;
Try
z := MyObjectList.Count;
If z > 0 Then
For i := 0 To z-1 Do
Liste.Append(MyObjectList.Dateiname + K + DateTimeToStr(MyObjectList.Datum));
Liste.SaveToFile(Dateiname);
Finally
Liste.Free;
End;
End;
Ähnlich würde dann das Einlesen erfolgen:
Delphi-Quellcode:
Procedure FormMain.Einlesen(Const Dateiname : String);
Const
K = ';';
Var
DList,
Liste : TStringList;
Id,
i,z : Integer;
Obj : TMyObjekt;
Begin
Liste := TStringList.Create;
DList := TStringList.Create;
Try
Anzahl := 0;
DList.Delimiter := K;
DList.StrictDelimiter := True;
Liste.LoadFromFile(Dateiname);
z := Liste.Count;
If z > 0 Then
For i := 0 To z-1 Do
Begin
DList.DelimitedText := Liste[i];
If DList.Count = 2 Then
Begin
Obj := TMyObjekt.Create;
Obj.Dateiname := DList[0];
Obj.Datum := StrToDateTime(DList[1]);
Id := MyObjectList.Add(Obj);
If Id < 0 Then Obj.Free; // dann ist nämlich das Add mißlungen und das Objekt muß freigegeben werden
End;
End;
Finally
DList.Free;
Liste.Free;
End;
ShowMessage('Es wurden ' + IntToStr(MyObjectList.Count) + 'Objekte eingelesen ...');
End;
Alles ohne Gewähr, da frei in den Editor getippt und daher ungetestet.