Binäre Dateien
TKontakte.LoadFromBinaryTag
Die Klasse TKontakte soll selbst in der Lage sein, sich aus den Daten des Zwischenformats zu rekonstruieren. Dies geschieht in der Methode LoadFromBinaryTag, die wir jetzt implementieren werden.
TKontakte = class(TObjectList) private function GetItems(Idx: integer): TKontakt; public procedure LoadFromBinaryTag(Tag: TRakBinaryTag); procedure SaveToBinaryTag(Tag: TRakBinaryTag); function NewKontakt: TKontakt; property Items[Idx: integer]: TKontakt read GetItems; default; end; procedure TKontakte.LoadFromBinaryTag(Tag: TRakBinaryTag); var TagList: IRakBinaryTagList; I: integer; Kontakt: TKontakt; begin Clear; TagList := Tag.FindTagsByName('Kontakt'); for I := 0 to TagList.Count - 1 do begin Kontakt := NewKontakt; Kontakt.LoadFromBinaryTag(TagList.Items(I)); end; end;
LoadFromBinaryTag erhält über den Parameter Tag, die Daten, aus denen es die Kontakte erzeugen kann.
Clear;
Zuerst werden evtl. noch vorhandene Kontakte gelöscht.
TagList := Tag.FindTagsByName('Kontakt');
Dann werden die Knoten angefordert, welche die Daten eines jeden Kontaktes enthalten. Im Gegensatz zu der Methode FindFirstTag, die wir im vorherigen Abschnitt kennen gelernt haben, besorgt FindTagsByName nicht nur den ersten Unterknoten mit dem Namen ‚Kontakt‘, sondern alle. Diese erhält man in Form einer Liste. Die Liste ist ein Schnittstellenobjekt. Deshalb müssen wir uns nicht um die Freigabe der Liste kümmern, das wird automatisch am Ende der Methode erledigt.
for I := 0 to TagList.Count - 1 do
Wir arbeiten jeden Knoten einzeln ab.
Kontakt := NewKontakt;
Für jeden Knoten wird ein neuer Kontakt erzeugt.
Kontakt.LoadFromBinaryTag(TagList.Items(I));
Der Kontakt muss selbst seine Daten aus dem Knoten herauslesen. Dieses LoadFromBinaryTag implementieren wir im nächsten Abschnitt.