Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Serialisieren eines Objektes unter D7 (https://www.delphipraxis.net/33841-serialisieren-eines-objektes-unter-d7.html)

Mr_G 14. Nov 2004 18:18

Re: Serialisieren eines Objektes unter D7
 
Also es gibt die Eigenschaft aber ich kann sie irgendwie nicht verwenden. Sie wird auch in der Programmierhilfe nicht angezeigt... :gruebel:

Zitat:

Hallo,
wenn ich das richtig sehe möchtest Du von einem TCollectionItem aus auf eine Eigenschaft der Collection zurgreifen, die das TCollectionItem verwaltet.
Eigentlich möchte ich auf eine Eigenschaft des Objektes zugreifen welches die Collection als Eigenschaft hat.

maximov 16. Nov 2004 09:35

Re: Serialisieren eines Objektes unter D7
 
Moin,

da kommt unsere geliebte Collection ja mal wieder zu ehren :-D Vielleicht könnte man diesen thread mit dem der CodeLib verbinden, denn hier sammeln sich ja schon interessante fakten.

Zum problem, wenn du aus dem item, auf eine property der collection zugreifen willst, dann musst du 'casten'. Oder entsprechende kapselungen bereitstellen. Ungefähr so:
Delphi-Quellcode:
type
  // Angenommen das ist deine CollectionKlasse
  TMyCollection = class(TmxJsCollection)
   ...
  published
    property MyProp:TFoo read etc..
  end;


  // angenommen das ist deine itemklasse
  TMyItem = class(TCollectionItem)
  private
    function GetMyCollection:TMyCollection;
  public
    property MyCollection: TMyCollection read GetMyCollection; // collection gecasted kapseln
  end;
 
function TMyItem.GetMyCollection:TMyCollection;
begin
  result := (Collection as TMyCollection);
end;

....
// jetzt kannst du aus jedem item einfach, die properties der collection abrufen, ohne jedesmal explizit zu casten:

MyCollection.MyProp := bar;
ich hoffe deine frage zielte auf soetwas ab? Davon abgesehen würde ich TmxJsCollection benutzen, da die daten somit als text gespeichert werden können, was in der entwicklung ein schnelles einsehen und modifizieren ermöglicht :-D

Jens Schumann 16. Nov 2004 10:14

Re: Serialisieren eines Objektes unter D7
 
Hallo,
wenn ich mir die Zeichnung anschaue, dann vermute ich das Mr_G soetwas meint:

Delphi-Quellcode:
TSubCollection_1_Item = class(TCollectionItem) // wird von SubCollection_1 verwaltet !!!
...

TCollection_1 =class(TmxJsCollection)
private
  FSubCollection_1 : TmxJsCollection;
  FXYZ            : Integer;
public
  property SubCollection_1 : TmxJsCollection read FSubCollection_1 write FSubCollection_1;
  property XYZ: Integer read FXYZ write FXYZ;
end;
Jetzt möchte Mr_G über SubCollection_1 auf XYZ Zugreifen.
SubCollection_1.Collection. weiter kommt Mr_G z.Z. noch nicht.
Jetzt würde ich für SubCollection_1 einen Nachfahren von TmxJsCollection basteln.
Diesem Nachfahren würde ich eine Parent Eigenschaft verpassen

Delphi-Quellcode:
TSubCollection_1_Item = class(TCollectionItem) // wird von SubCollection_1 verwaltet !!!
...

TCollection_1 =class;

TmxJsCollectionParent=class(TmxJsCollection)
private
  FParent : TCollection_1;
public
  property Parent : TCollection_1 read FParent write FParent;
end;

TCollection_1 =class(TmxJsCollection)
private
  FSubCollection_1 : TmxJsCollectionParent;
  FXYZ            : Integer;
public
  constructor Create(ItemClass : TCollectionItemClass);
  property SubCollection_1 : TmxJsCollectionParent read FSubCollection_1 write FSubCollection_1;
  property XYZ: Integer read FXYZ write FXYZ;
end;

...
TCollection_1.constructor.Create(ItemClass : TCollectionItemClass);
begin
  inherited Create(ItemClass);
  FSubCollection_1:=TmxJsCollectionParent(TSubCollection_1_Item);
  FSubCollection.Parent:=Self; // Hier ist es !!!!!!!!
  ...
end;
Jetzt geht folgendes:
Delphi-Quellcode:
TmxJsCollectionParent(TSubCollection_1_Item.Collection).Parent.XYZ
(ungetested)

maximov 16. Nov 2004 10:53

Re: Serialisieren eines Objektes unter D7
 
Ahso, ich hab dieses problem immer mit TOwnedCollection gelöst. Dazu hab ich einfach den vorfahr von TJsCollection geändert. So kann man schön auf den owner zugreifen, auch wenn es konzeptionell nicht so schön ist. Letzendlich kommt es immer drauf an, was man erreichen will...vielleicht denkt Mr_G da auch zu kompliziert (soll ja vorkommen) und es gibt eine einfache lösung?

Jens Schumann 16. Nov 2004 19:57

Re: Serialisieren eines Objektes unter D7
 
Zitat:

Zitat von maximov
Ahso, ich hab dieses problem immer mit TOwnedCollection gelöst....

Jetzt wo Du es schreibst fällt mir TOwnedCollection auch wieder ein :wall:

Mr_G 19. Nov 2004 15:42

Re: Serialisieren eines Objektes unter D7
 
Hmmm
Ersma Sorry das ich mich so lange nich gemeldet hab (Grippe :cry: )...

Nun aber wieder zum Thema:
Welche der Lösungen ist für mein beschriebenes Problem nun die beste und falls es die mit TOwnedCollection ist, wie benutze ich das :?:

Nochmal danke der Hilfe :thumb:

Jens Schumann 19. Nov 2004 15:45

Re: Serialisieren eines Objektes unter D7
 
Zitat:

Zitat von Mr_G
Nun aber wieder zum Thema:
Welche der Lösungen ist für mein beschriebenes Problem nun die beste und falls es die mit TOwnedCollection ist, wie benutze ich das

Siehe maximov's Post. Dort schreibt er, Du nur den Vorfahr von TJsCollection austauschen musst. Das ist die Lösung!!!

maximov 2. Dez 2004 00:12

Re: Serialisieren eines Objektes unter D7
 
Zitat:

Zitat von Jens Schumann
Zitat:

Zitat von Mr_G
Nun aber wieder zum Thema:
Welche der Lösungen ist für mein beschriebenes Problem nun die beste und falls es die mit TOwnedCollection ist, wie benutze ich das

Siehe maximov's Post. Dort schreibt er, Du nur den Vorfahr von TJsCollection austauschen musst. Das ist die Lösung!!!

Genau. Du musst dann vermutlich noch den Constructor auf den neuen vorfahren anpassen. Sprich, den Owner-parameter hinzufügen, geanu wie in TOwnedCollection und inheriten :)

Mr_G 4. Dez 2004 12:05

Re: Serialisieren eines Objektes unter D7
 
Da ich mich aus zeitmangel erst jetzt wieder mit dem Thema beschäftigt habe, habe ich nun immernoch ein Problem:
Ich habe das mit der OwnedCollection gemacht, was auch so aussieht als sei es die Perfekte Lösung meines Problems.
Leider kann ich sie nicht umsetzen weil meinem Objekt mit dem Vorfahren TCollectionItem die Eigenscaft Collection fehlt.
Ich kann besagte Eigenschaft einfach nicht nutzen (wird u.A. von der Programmierhilfe auch nicht angezeigt). Daraus folgt das ich natürlich auch nicht auf den Owner meiner Collection zugreifen kann was ich ja erreichen wollte...

Was könnte ich falsch gemacht haben? :cry:

Jens Schumann 4. Dez 2004 14:03

Re: Serialisieren eines Objektes unter D7
 
Hallo,
da TCollectionItem die property Collection hat, haben alle Nachkommen diese property.
Die property Collection ist aber vom Type TCollection evt. muss Du für den
Zugriff noch auf Deinen TCollection Nachfahren casten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz