Zitat:
Darf man - aus reiner Neugier natürlich - fragen, wartum du nicht das bereits vorhandene, ,und von Delphi für die
dfm-Dateien benutzte Streaming verwendest ?
Warum Du fragst ist eigentlich egal
Ich hatte zum Einen keinen wirklichen Zugang zu den Streaming-Funktionen gefunden. Zwar habe ich verstanden, wie das grundsätzlich funktioniert, aber das für meine Zwecke zu verwenden erschien mir zu kompliziert und nicht genau passend.
- Mit meiner Version bin ich nicht an bestimmte Reihenfolgen gebunden.
- Jede Komponente kann ihre Daten lesen und schreiben, wenn sie es für richtig hält.
- Es können beliebige Daten geschrieben und gelesen werden (nicht nur propertys).
(nach meinem Verständnis geht das mit dem
dfm-Streaming nicht)
Jedenfalls war der Aufwand, eine eigene Ini-Komponente abzuleiten nicht wirklich groß und ich bin mit dem Ergebnis (bis auf die Verknüpfungen bisher) sehr zufrieden...
Zitat:
Wenn du es gerne selber mamchen möchtest; würde ich so vorgehen, dass ich erstmal alle Objekte auslese (ohne Verknüpfungen herzustellen) und dann die Obekte die Verknüpfungen erneut herstellen lasse.
Alternativ (das hört sich nach dem an, was du schon probiert hattest) Wenn du auf etwas stößt, dass du noch nicht gelesen hast, ne ID vergeben und am Ende kann sich dann jedes Objekt (unter Angabe der ID) sein richtiges Objekt "abholen" ...
Alles nicht so einfach wenns derart universell sein soll
So habe ich es bei meiner Stream-Variante getan und werde es jetzt dann auch so machen. Mit so einer "Pointerumbiegung" hätte ich das nur etwas universeller und einfacher lösen können - schade, dass es mit propertys so nicht geht
Die Datei sieht übrigens dann ungefähr so aus (Bild gekürzt):
Zitat:
[Club]
ID1=39597,7929584838
ID2=39597,7966440509
HeadingLong=BV Halle 06 e.V.
HeadingShort=BV Halle 06
HeadingAbbr=HAL
EMail=
Players.Item1=Component(DPlayer1) // diese Einträge
Players.Item2=Component(DPlayer2) // werden automatisch
Players.Item3=Component(DPlayer3) // erzeugt, ebenso
Players.Item4=Component(DPlayer4) // die entsprechenden
Players.Item5=Component(DPlayer5) // Sections
[Component(DPlayer1)]
{ClassName}=TDPlayer
{Owner}=
Person.ID1=39597,7929584838
Person.ID2=39597,7969948148
Person.FirstName=André
Person.LastName=Günther
Person.NickName=Die Lippe
Person.ShortName=
Person.BirthDay=29.05.1988
Person.Kind=m
Person.Picture=Base64(Qk3GXwEAAA.................. ...................AAADYAAAA)
PersonClub.ClubLeader=0
PersonClub.HomeTeamNo=0
PersonClub.HomeTeamPos=0
PersonClub.HomeTeamLeader=0
PersonTournament.Participation=0
[Component(DPlayer2)]
{ClassName}=TDPlayer
{Owner}=
Person.ID1=39597,7929584838
Person.ID2=39597,7982654861
Person.FirstName=André
Person.LastName=Stahl
Person.NickName=Printer
Person.ShortName=
Person.BirthDay=29.05.1988
Person.Kind=m
Person.Picture=Base64(Qk3GXwEAAA.................. ...................AAADYAAAA)
PersonClub.ClubLeader=0
PersonClub.HomeTeamNo=0
PersonClub.HomeTeamPos=0
PersonClub.HomeTeamLeader=0
PersonTournament.Participation=0
Die zu benutzenden Methoden sind:
TExtIniFile.WriteComponent(...);
TExtIniFile.WriteComponentList(...);
TExtIniFile.ReadComponent(...);
TExtIniFile.ReadComponentList(...);
Es werden also auch Listen von Komponenten gespeichert und wieder hergestellt.
TExtIniFile erzeugt dann automatisch die entsprechenden Einträge und Sections und veranlasst die Komponenten dann, diese beim Speichern/Lesen zu verwenden.
Für Binädaten kann man
TExtIniFile.WriteBase64(...);
TExtIniFile.ReadBase64(...);
nutzen.
Was noch nicht umgesetzt ist, ist eben
TExtIniFile.WriteComponentPOINTER(...);
TExtIniFile.ReadComponentPOINTER(...);
um Verküpfungen wieder herzustellen.
Stahli