![]() |
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 |
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.
![]() 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 ;) |
Re: Objecte oder Objectlisten Speichern
Zitat:
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 |
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 ![]() Gruß Richard |
Re: Objecte oder Objectlisten Speichern
Zitat:
Delphi-Quellcode:
...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?
myWrite:TWriter;
.. myWrite.WriteComponent(myMapObject); Zitat:
So könnte ein solcher serialiserer aufgebaut sein:
Delphi-Quellcode:
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.
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); Zitat:
|
Re: Objecte oder Objectlisten Speichern
Vielleicht hilft dir das weiter.
![]() Gibt ne kleine verbesserung um auch Streams mit ab zu speichern. Wenn du es brauchst, meld dich bei mir |
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 |
Re: Objecte oder Objectlisten Speichern
*push*
|
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:
gruß Richard
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. |
Re: Objecte oder Objectlisten Speichern
Zitat:
![]() 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 23:24 Uhr. |
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