Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: Von TStringList abgeleitete Klasse inkl. Objecten speichern

  Alt 9. Jul 2010, 09:43
Aber ohne inherited wird es nicht gehen.
Das glaube ich nicht wirklich.
Denn mein Object erbt die Methode SaveToFile() abgeleitet von TStringList. Das wiederum speichert ja nur die einzelnen Listeneinträge in einer Datei. Ich kann mir daher nicht vorstellen, dass ein inherited irgend etwas bzgl. der mit der Liste gespeicherten Objecte bewirken soll.

Im Moment sieht mein Code - sehr sehr unschön - so aus:
Delphi-Quellcode:
Type
   TDish      = Record                              // Record zum abspeichern
                  SystemID      : Integer;
                  DishName      : String[255];
                  DishType      : Integer;
                  Price         : Currency;
              End;

// Liste in eine Datei speichern
Procedure TDishList.SaveToFile(Const FileName: String);
Var
   I            : Integer;
   Buffer      : TDish;
   OutFile      : File Of TDish;
Begin
   If Count < 1 Then Exit;                        // es muss mind. 1 Eintrag da sein

   AssignFile(OutFile, FileName);               // Dateiname zuweisen
   {$I-}
   FileSetAttr(FileName, $00);                  // alle Attribute löschen
   DeleteFile(PAnsiChar(FileName));               // Datei löschen und
   ReWrite(OutFile);                              // neu anlegen
   For I:=0 To Pred(Count) Do                     // gesamte Liste durchgehen
   Begin
      FillChar(Buffer, SizeOf(Buffer), 0);      // Puffer leeren
      Buffer.SystemID:=(Objects[I] As TDishes).SystemID;
      Buffer.DishName:=(Objects[I] As TDishes).DishName;
      Buffer.DishType:=(Objects[I] As TDishes).DishType;
      Buffer.Price:=    (Objects[I] As TDishes).Price;
      Write(OutFile, Buffer);                     // Daten in Datei ablegen
   End;
   CloseFile(OutFile);                           // die Datei schließen
   {$I+}
End;
Das laden dann analog. Aber das ist umständlich und kompliziert. Und wenn man das später mal warten will, dann muss man statt 5-7 Zeilen für WriteComponent() eben diese vielen behandeln.

Gruß, Alex

P.S. Ich liebe im Übrigen das With! Wenn ich größere Objecte habe, in denen ich - als welchen Gründe auch immer - bestimmte Properties in der Registry oder sonstwie speichern muss, dann spare ich mir etliche Zeilen Code auf diese Art und Weise. Das ist aber nur meine persönliche Meinung.
Alex Winzer
  Mit Zitat antworten Zitat