Zitat von
supermuckl:
Geht ja mit den records nicht <- ?
Wenn interessieren auch schon records.
@Topic
Da hat wohl einer die CodeLib vergessen.
Da findet man nämlich so schöne Sache wie die
dpCollection.
Vergesse also einfach ganz schnell, dass es sowas wie records gibt.
Leite deine Klasse von TCollectionItem ab und alles, was gespeichert werden soll deklarierst du als published property.
Delphi-Quellcode:
unit uPerson;
interface
uses
Classes,
dpCollection;
type TBeruf = (Entwickler, Maurer, Imperator);
type TPerson =
class(TCollectionItem)
private
fVorname:
string;
fBeruf: TBeruf;
published
property Vorname:
string read fVorname
write fVorname;
property Beruf: TBeruf
read fBeruf
write fBeruf;
end;
{$DEFINE TYPED_DP_COLLECTION_TEMPLATE}
type _COLLECTION_ITEM_ = TPerson;
{$INCLUDE dpCollection_tmpl.pas}
TPersonCollection = _COLLECTION_;
implementation
{$INCLUDE dpCollection_tmpl.pas}
end.
Delphi-Quellcode:
var
newPerson: TPerson;
Personen: TPersonCollection;
const
FileName = 'Personen.dfm';
begin
Personen := TPersonCollection.Create();
newPerson := Personen.Add;
with newPerson do
begin
Vorname := 'Robert';
Beruf := Entwickler;
end;
Personen.SaveToFile('Personen.dfm');
end.
Gespeichert wird:
Code:
object COLLECTION_: _COLLECTION_
items = <
item
Vorname = 'Robert'
Beruf = Entwickler
end>
end
Klingt noch nicht sonderlich cool, oder?
hmmm..., stelle dir vor, du musst deine Klasse später erweitern:
Delphi-Quellcode:
private
fName: string;
...
published
property Name: string read fName write fName;
...
Genau hier versagt ein File Of [Datentyp].
Mit der dpCollection ist das kein Problem.
Delphi-Quellcode:
Personen.LoadFromFile('Personen.dfm'); //lade alte Daten
newPerson := Personen.Add;
with newPerson do
begin
Vorname := 'Hans';
Name := 'Schröder'; // neue Eigenschaft!
Beruf := Maurer;
end;
Personen.SaveToFile('Personen.dfm'); // zurück schreiben
Jetzt haben wir:
Code:
object COLLECTION_: _COLLECTION_
items = <
item
Vorname = 'Robert'
Beruf = Entwickler
end
item
Name = 'Schr'#246'der'
Vorname = 'Hans'
Beruf = Maurer
end>
end
Die Collection ist also vollständig abwärtskompatibel.
oder ums es kleiner zu bekommen:
Personen.Binary := True;
Code:
TPF0_COLLECTION_COLLECTION_itemsVornameRobertBeruf
Entwickler Name SchröderVornameHansBeruf
Maurer