Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

TCollection speichert nicht im DFM, was fehlt?

  Alt 16. Apr 2010, 12:57
Hallo,

ich bin dabei eine eigene Komponente zu entwickeln. Erstmalig tritt nun der Fall auf, dass ich eine Liste eigener Unterobjekte in meiner Komponente speichern muss. Dazu wurde mir im Thread Speichern eines Objekts mit einer Liste von Objekten im DFM geraten, mit TCollection und TCollectionItem zu arbeiten und schon würden die Unterobjekte im DFM-File automatisch mitgespeichert. Das ist leider nicht der Fall. Bestimmt habe ich TCollection falsch verwendet oder nicht alle notwendigen Anpassungen vorgenommen. Vielleicht spielt auch meine Delphi-Version eine Rolle (Delphi 5 Enterprise). Folgender Code stellt den Kern dar:

Delphi-Quellcode:
TMyItem = class(TCollectionItem)
    ...
end;

TMyItemList = class(TCollection)
  private
    FItems: array of TMyItem;
  protected
    function GetItem(AIndex: Integer): TMyItem;
    procedure SetItem(AIndex: Integer; AItem: TMyItem);
    ...
  public
    ...
    function Add: TCollectionItem; overload;
    function Add({eigene Argumente für Initialisierung}): TMyItem; overload;
    property Items[Index: Integer]: TMyItem read GetItem write SetItem; default;
end;

TCustomMyComp = class(TCustomControl)
  private
    FItems: TMyItemList;
    ...
  public
    ...
    property Items: TMyItemList read FItems;
end;
Die Property vom Typ TMyItemList ist published, der Property Editor von TCollection wird angezeigt und ich erstelle meine Items damit. Wenn ich allerdings die Form neu öffne (so dass er die Items aus der DFM laden müsste), sind sie nicht da. In der DFM wird auch nichts weiter erstellt (Unterobjekteintäge für meine Items).

Was muss ich tun, damit meine Items auch in der DFM gespeichert werden, wenn sie zur Entwurfszeit mit dem Property Editor von TCollection erstellt werden?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat