Thema: Delphi Dateitypen

Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 

Re: Dateitypen

  Alt 19. Jan 2005, 00:59
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
  Mit Zitat antworten Zitat