Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objecte oder Objectlisten Speichern (https://www.delphipraxis.net/48862-objecte-oder-objectlisten-speichern.html)

richard_boderich 1. Jul 2005 12:01


Objecte oder Objectlisten Speichern
 
Hallo Leute!

Ich hab eigene Objecte in dehnen sich auch visuelle Controls von delphi befinden, und muss diese irgentwie abspeichern. Entweder alle Objecte, einzeln oder die ganze Objectlist. Bei der suche bin ich auf DP collection gestoßen, kann aber leider gar nix damit anfangen.
kann mir bitte jemand sagen was die DPcollection genau ist und was sie macht?

Eigentlich such ich was ganz einfaches wie Objectlist.loadfromfile oder so etwas. (ich weis Objectlisten speichern nur Pointer, geht also so nich) ;)

waere nett wenn mir jemand ein bisschen grundsaetzliches ueber die DPcollection sagen koennte, denn der Beitrag in der DP ist so gehalten, als wenn die DPcollection das selbstverstaendlichste auf der welt ist. Was sie aber für mich als neuling definitiv nicht ist.

:duck:

Gruß,

Richard

maximov 1. Jul 2005 12:38

Re: Objecte oder Objectlisten Speichern
 
Die dpCollection ist eigentlich nicht das was du suchst. Davon abgesehen kann mann sie zu so missbrauchen, dass sie tut was du willst. In der DP gibt es mittlerweile tausende beiträge zum thema dpCollection, wesshalb es keinen sinn macht nochmal alles durchzukauen *sorry* hier zB. http://www.delphipraxis.net/internal...ct.php?t=39210 wir das ausführlich besprochen.


Was du eigentlich brauchst, ist ein generischer Serialisierer für TObjectList. Vielleicht kennt ja jemand einen, oder ist bereit einen zu schreiben...ich hätte schon lust, aber leider keine zeit :(


PS: Warum erwähnst du einen derart unwichtigen knilch, den du auch noch hasst, in deiner signatur? Ich würd ihn ja einfach aus meinen bewustsein verbannen und seinen namen nicht nennen, sonst hat er schon gewonnen ;)

alcaeus 1. Jul 2005 12:39

Re: Objecte oder Objectlisten Speichern
 
Zitat:

Zitat von richard_boderich
waere nett wenn mir jemand ein bisschen grundsaetzliches ueber die DPcollection sagen koennte, denn der Beitrag in der DP ist so gehalten, als wenn die DPcollection das selbstverstaendlichste auf der welt ist. Was sie aber für mich als neuling definitiv nicht ist.

Die dpCollection ist nicht selbstverstaendlich? :shock: :zwinker:

Das erinnert mich irgendwie daran dass ich mein Tutorial zur dpCollection fertigschreiben wollte :wall:
Wenn du interessiert bist, kann ich dir mal die Vorabversion schicken (englisch und ws. mit Fehlern), der Rest wird noch 1-2 Wochen warten muessen ;)

Greetz
alcaeus

richard_boderich 1. Jul 2005 13:07

Re: Objecte oder Objectlisten Speichern
 
@Maximov, guck mal bitte hier da ist das project an dem ich arbeite und eine Definition meines Objectes. Ist ne etwas fruehere version also sei nicht so streng mit mir.

Delphi-Quellcode:
  TMapObject = class(TControl)
  private
    image: TImage;                // Für das entsprechende Einheitenbild besser vielleicht Imagelist, kann imagelist nur bmp ich brauch aber gif? 
    Edit: TEdit;                  // Eingabefeld für Einheitenname
    Einheitenname: TStaticText;   // Anzeige des Einheitennamens
    X,Y: Integer;                 // Position der Einheit auf Karte Y
    Typ: String;                  // z.B. "Infantry", Image ist abhaengig vom Einheitentyp wo kann ich diese Abhaengigkeit berechnen oder festlegen z.B wenn Einheitentyp = 2  dann image.picture.'Panzer.bmp"
    Einheitenstatus: String;      //draggen ermoeglichen und draggingstatus

    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DblClick(Sender: TObject); reintroduce; virtual;
    procedure ImageClick(Sender: TObject);
    procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); reintroduce; virtual;
  //  procedure UpdateStatus(Einheitentyp: String; Status: String);
  published
    property Status :String read Einheitenstatus write Einheitenstatus;
    property Einheitentyp :String read Typ write Typ;
    property MapX :Integer read x write x;
    property MapY :Integer read y write y;
  //  procedure zeichnen(Mapx,Mapy:integer);
  public
    constructor Create(Owner: TComponent; MapX: Integer; MapY: Integer; Einheitentyp:String; Status:String); reintroduce; virtual;
       { Public-Deklarationen } 
  end;

Apropos, was ist ein generischer Serialisierer???



ich dachte die DP collection speichert alles was irgentwie Objectmaessig ist???

@Alcaeus, sehr gerne haett ich ein torturiel. aber da es in englisch ist, beweifle ich das ich es verstehen werde. ich bin noch recht neu in der OOP, habvorher alles mit records gemacht. (die waren einfach zu speichern *verklaerrt zurueckdenk*) dann hatt mir jemand gesagt nimm objecte alles viel einfacher, besser und schneller. Teilweise stimm ich dem zu. die verwaltung und die steuerung über
das setzten von propertys ist sehr konfortabel. auch kann ich jetzt vcl control's kapseln - sehr gut. aber wenn ich riesigen aufwand
treiben muss um den ganzen sack abzuspeichern? siehe Record vs. Klassen

Gruß

Richard

maximov 3. Jul 2005 19:11

Re: Objecte oder Objectlisten Speichern
 
Zitat:

Zitat von richard_boderich
@Maximov, guck mal bitte hier da ist das project an dem ich arbeite und eine Definition meines Objectes. Ist ne etwas fruehere version also sei nicht so streng mit mir.
...

Da controlls komponenten sind und man eben diese mit dem Component-streaming-system von delphi serialisieren kann, bietet es sich doch an zB. den TWriter zum speichern zu verwenden. Das wäre in etwa so:

Delphi-Quellcode:
myWrite:TWriter;
..
myWrite.WriteComponent(myMapObject);
...allerdings hast du so keine liste und geht evtl. nicht auf das eigentliche problem ein. Interessant wäre es zu wissen, was du letztendlich erreichen willst?

Zitat:

Apropos, was ist ein generischer Serialisierer???
Ein Serialisiere, also eine instanz, welche den inneren zustand von objekten in eine serielle representation (stream) verwandelt und dies sehr allgemein gehalten, sodass der serialisierer keine kenntnis von den tatsächlichen objekten haben braucht. Ein Deserialisierer würde aus dem stream dann wieder konkrete objekte machen.

So könnte ein solcher serialiserer aufgebaut sein:
Delphi-Quellcode:
type
  ISerializerStrategy = interface();
    function GetNameOfClass(aClass:TClass):string;
    function GetClassByName(const Name:string):TClass;
    ...
  end;

  TObjectSerializer = class
  protected
    procedure SerializeObject(aObject:TObject);
  public
    constructor create(stream:TStream; SerializerStrategy:ISerializerStrategy);
    procedure SerializeObjects(List:TObjectList);
  end;

...
// verwende:
var
  Serializer:TObjectSerializer;
...
  Serializer:=TObjectSerializer.Create(myStream, myStrategyImplementation);
  Serializer.SerializeObjects(myObjectList);
So in etwa :) Wobei das auch noch nicht sonderlich generich ist, da geht noch einiges mehr. Über die strategy kann der serialisieren rückfragen an den programmirer stellen, sodass das system keine ahnung haben braucht wo irgendwelche klassen registriert sind etc. zB. könnte man die strategy auch fragen, welche object überhaupt serialisiert werden sollen etc. Is so auch nur ne idee.

Zitat:



ich dachte die DP collection speichert alles was irgentwie Objectmaessig ist???
die dpCollection speichert nur collection items, welche du allerdings als container für TPersistent abkömmlinge konfigurieren kannst.

Taladan 3. Jul 2005 20:45

Re: Objecte oder Objectlisten Speichern
 
Vielleicht hilft dir das weiter.

Objecktliste mit polomorten Objecten speichern

Gibt ne kleine verbesserung um auch Streams mit ab zu speichern. Wenn du es brauchst, meld dich bei mir

richard_boderich 3. Jul 2005 21:12

Re: Objecte oder Objectlisten Speichern
 
@ all,

wie ich schon vermutet habe, versteht ich garnichts vom dem was ihr sagt. Für mich sind
diese begriffe alles Dörfer aus böhmen und määren.

Aber mal ne andere Frage.

Wenn ich jetz die dpcollection einbinde und die parameter meiner objecte übergebe
an ein object das ich mit der dpcollection erstelle. koennte ich das
dann abspeichern. und bei laden mach ich es dann umgekehrt?

muesste dann irgenwie die anzahl der objecte in der liste mit abspeichern, aber sonst
muesst es doch gehn oder ??

Gruß Richard

richard_boderich 4. Jul 2005 08:43

Re: Objecte oder Objectlisten Speichern
 
*push*

richard_boderich 21. Jul 2005 12:49

Re: Objecte oder Objectlisten Speichern
 
@all

geht das nich auch einfacher? ich will nichts in einem stream, oder ins xml format konvertieren, ich moecht nur mein object
mit allen darin enhaltenen propertys abspeichern und wieder oeffnen?

achso , kann mir einer eventuell diesen satz aus der OH mal erklaeren?

Delphi-Quellcode:
Rufen Sie WriteComponent nicht direkt auf. WriteComponent wird für jede untergeordnete Komponente in Root rekursiv aufgerufen.

WriteComponent weist der Eigenschaft ComponentState von Component den Status csWriting zu, bevor die Methode WriteState von Component aufgerufen wird, und löscht das Flag csWriting, sobald WriteState die Steuerung zurückgibt.

Hinweis:   Die Methode WriteComponent des Writer-Objekts ruft die Methode WriteState der Komponente auf, die ihrerseits die Methode WriteData
 des Writer-Objekts aufruft. Diese Methode schreibt die Eigenschaften für jede untergeordnete Komponente und ruft dann WriteComponent auf.

Da die Methode WriteState der Komponente eine virtuelle Methode ist, stellt sie die einzige Möglichkeit der Komponente dar, sich auf das Schreiben in den Stream vorzubereiten.
gruß Richard

Eisenherz 22. Jul 2005 09:13

Re: Objecte oder Objectlisten Speichern
 
Zitat:

Zitat von richard_boderich
wie ich schon vermutet habe, versteht ich garnichts vom dem was ihr sagt. Für mich sind
diese begriffe alles Dörfer aus böhmen und määren.

Um dich endgültig zu verwirren hier noch ein weiterer Link.
In dem dazugehörigen Tutorial wird eine Liste von Objekten gespeichert. Im Gegensatz zu DPCollection muss man seine zu speichernden Objekte nicht von einer bestimmten Klasse ableiten.
Es gibt auch eine RTTI-Unterstützung, sprich published Properties werden automatisch gespeichert und geladen. Das wird im Tutorial aber nicht angesprochen. Dazu gibt es nur ein Beispielprogramm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Seite 1 von 2  1 2      

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