![](styles/elise/misc/quote_24x24.png)
Zitat von
supermuckl:
Geht ja mit den records nicht <- ?
Wenn interessieren auch schon records.
@Topic
Da hat wohl einer die CodeLib vergessen.
![Wink](images/smilies/icon_wink.gif)
Da findet man nämlich so schöne Sache wie die
dpCollection.
Vergesse also einfach ganz schnell, dass es sowas wie records gibt.
![Wink](images/smilies/icon_wink.gif)
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