![]() |
Members von Objekten speichern
Hallo zusammen,
ich habe einige verschiedene Objekte von denen ich bestimmte Members abspeichern möchte (z.B. Status,Name usw.). Nun möcht ich von euch wissen wie man sowas am besten macht? Soll ich diese Eigenschaften in einer INI ,XML oder eine typisierte Datei verwenden. Was ist einfacher zu handhaben? Auf jeden Fall muss ich nach jeder Eingabe die bestimmten Eigenschaften des jeweilige Objekts abspeichern, weil diese Datei immer auf dem aktuellen Stand sein muss. Auch nach einem Stromausfall muss das Prg die Datei laden und an dem Punkt weiterarbeiten an dem es unterbrochen wurde. Bin auf eure Vorschläge schon sehr gespannt. Gruß Dieter |
Re: Members von Objekten speichern
Wenn du diese Member als Puplished-Properties bereitstellst, dann könntest du z.B. die Serialisierungsfunktionen nutzen, welche öfters im Zusammenhang mit XML existieren.
Dann brauchst du nur der Funktion das Objekt übergeben und dieses ließt automatisch die Member/Property aus. Ja und am Schluß nur noch speichern. > ![]() |
Re: Members von Objekten speichern
Sorry himitsu,
dass ich mich erst heute wieder melde, hab mal versucht mich mit dieser Serialisierung zu beschäftigen, bin aber noch nicht ganz durchgestiegen. Was ich nicht möchte, ist dass alle Members die Property sind gespeichert werden, sondern nur ausgesuchte, ich habe aber bis jetzt keine Routine gefunden mit der ich das bewerkstelligen könnte. Bin aber auch nicht der XML Spezialist. Was mich etwas wundert ist, dass nur von dir einen Vorschlag bekommen habe. Gruß Dieter |
Re: Members von Objekten speichern
Du kannst ja den Properties unterschiedliche Sichtbarkeiten verpassen
Private, Protected, Puplic und Publisched ... dabei werden meißtens nur Puplished-Properties gespeichert. Unter Umständen könnte man auch noch die Puplic-Properties auslesen, aber von den Restlichen gibt es keine Liste in der RTTI .... standardmäßig existiert soeine Liste nur von den Puplisheds, welche von der Sichtbarkeit ähnlich wie Puplic sind und im Grunde auch Speicherung vorgesehn wurden. PS: Bei der VCL werden in der .DFM auch nur die Puplished-Properties gespeichert und im OI angezeigt. Zitat:
Zitat:
Bei meinem himXML würde das Speichern so gehn
Delphi-Quellcode:
Nur muß ich endlich mal Zeit und eine zündende Idee finden, um die Deserialisierung fertigzustellen.
XML := TXMLFile.Create;
Try Node := XML.AddNode('object'); Node.Serialize(Form1); XML.SaveToFile(...); Finally XML.Free; End; Aktuell geht nur Speichern und das Laden nicht immer richtig :oops: Aber zu ![]() Oder man steigt auf Binärdateien um und nutzt die Objekt-Serialisierung, welche auch die VCL nutzt. dafür muß man seine Klasse aber erstmal von TComponent ableiten und kann dann z.B. TFileStream.WriteComponent verwenden. (oh man, hab ich mich grad fast totgesucht ... ist schlimm, wenn man glaubt was zu kennen, aber nicht weiß wo es sich versteckt ... hatte erst eine SaveTo...-Funktion in TComponent gesucht :wall: ) Zitat:
und das mit der Serialisierung ist nunmal die Mitunder einfachste Variante, da wollte es wohl keiner doppelt erwähnen :angel: |
Re: Members von Objekten speichern
Hallo Optiplex,
steht die Anzahl der Komponenten und Eigenschaften fest oder variieren diese? Am einfachsten würde ich eine Ini ansehen. Da kannst Du ja problemlos Ini.WriteInteger(...Component1.Top...) Ini.WriteInteger(...Component2.Left...) speichern und später wieder herstellen. Problematischer wird es, wenn Du vorher nicht sagen kannst, wie viele und welche Objekte gespeichert und später wieder gelden (vielleicht sogar erzeugt) werden müssen. Für eine einfache Auslagerung einiger Eigenschaften würde ich einfach eine Ini nehmen und das von Hand veranlassen... Stahli |
Re: Members von Objekten speichern
Ok himitsu,
ich werde mich mal durch die ganzen Artikel, in der DP durcharbeiten vielleicht finde ich doch noch eine XML-Libery die mir das speichern und laden vereinfacht. Danke für deine schnelle Antwort Hallo Stahli Nein die Anzahl der Objekte steht nicht fest, sie können sich stehtig verändern. Welche Objekte gespeichert werden steht allerdings fest. Deshalb wollte eigentlich dieses mal keine INI verwenden, da ich ständig die Sektionen neu erstellen müsste. Ich bräuchte dafür eine wesendlich bessere INI-Lib als die von Delphi. Vielleicht weißt du eine? Gruß Dieter |
Re: Members von Objekten speichern
Ich habe mein letztes Projekt so aufgebaut und eine erweitere Ini dafür genutzt.
Die ermöglicht das Speichern und Wiederherstellen von kompletten Komponenten und auch von Beziehungen dieser Komponenten untereinander. Im Grunde macht sie so etwas ähnliches wie die Delphi-IDE, allerdings basieren die Wiederherstellungen der Verbindungen untereinander nicht auf dem Komponentennamen. Wenn es Dich interessiert, kannst Du mal ![]() ![]() Das hat ganz gut funktioniert, auch wenn ich mich inzwischen aus anderen Gründen für eine neue Lösung mit Datenbankanbindung entschieden habe. Die zu speichernden Komponenten müssen aber einige Voraussetzungen erfüllen, damit sie in der TExtIniFile gespeichert und geladen werden können. Heute Abend kann ich die Quellen gern schicken, vielleicht findest Du darin ja zumindest ein paar Anregungen... Stahli |
Re: Members von Objekten speichern
Vorsicht mit Serialisierung von Objekten!
Ändert sich eine Klasse grundsätzlich und man lädt eine Datei, die die serialisierten Daten noch in der alten Form vorweisen, wird man nicht glücklich werden. Ich mach so etwas gerne in eigenen Dateien. - eigener Header zur Erkennung der Datei - eigenes Format für alle Daten Wenn sich mal was ändert, hab ich so kein Problem mit, da ich im Header immer die Versionsnummer speichere und auf diese prüfe. Ich unterstütze in meinen Projekten immer alle Versionen meiner Dateien. |
Re: Members von Objekten speichern
Sorry dass ich mich erst heute wieder melde.
@Tyrael Y. Aus deinen Ausführungen entnehme ich, dass du mit Dateien mit einer eigenen Strucktur arbeitest. Das hat natürlich seine Vorteile. Ist allerdings auch sehr aufwendig. Das wäre die Lösung für mich wenn alles andere versagt. Das mit der Serialisierung von Objekten habe ich probiert bin aber auf keine grünen Zweig gekommen, hat einfach nicht so geklappt wie ich mir das Vorstelle. @stahli Danke Stahli für die beiden Links, werde Sie mir heute noch genauer anschauen. Ich glaube, dass eine erweiterte IniFiles genau das richtige wäre. Gibt es denn keine Ini-Unit mit mehr Möglichkeiten z.B. Umbenennen von Abschnitten usw. Gruß Dieter |
Re: Members von Objekten speichern
![]() Eine erweiterte Ini (außer meine, die aber recht kompliziert zu nutzen ist) kenne ich sonst nicht... Stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 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