![]() |
TRecordFile - Records per "Bauplan" in Dateien spe
Liste der Anhänge anzeigen (Anzahl: 1)
Morgen.
Ich hab mir schon lange mal sowas gewünscht wie "Objektpersistenz" (<-Anführungszeichen) bei Records. Das heißt, ich habe eine Klasse mit Methoden, die ich Aufrufe, dabei meinen Record übergebe, und der kann das in eine Datei speichern und auch daraus wieder laden. Kann sein, dass ich mit diesem Wunsch ziemlich alleine dastehe, aber ich hab das trotzdem mal programmiert. Es funktioniert im Prinzip so: Man "registriert" eine Art Bauplan für jeden Record-Typen, den man speichern will. Dieser besteht aus dem Namen des Recordtyps und aus "Feldern", die jeweils auch einen Namen haben sowie einen Typen. Dieser Record:
Delphi-Quellcode:
...lässt sich dem TRecordFile so "beibringen":
TTestRec=record
a, b, c, d: Integer; e: String[6]; f: Single; end;
Delphi-Quellcode:
Das ganze funktioniert momentan nur mit statischen Records (d.h. keine Strings oder Arrays mit Finalisation) und auch nur speichern, nicht laden (das kommt morgen... äh, heute) und außerdem nur mit recht ungeeigneten INI-Files.
type
TTestRecStructure=class(TRecordStructure) protected procedure CreateStructureFields; override; public class function GetRecordTypeName: String; override; end; implementation class function TTestRecStructure.GetRecordTypeName: String; begin Result:='TTestRec'; end; procedure TTestRecStructure.CreateStructureFields; begin Add(TRecordStaticField.Create('a', 0, ftInteger)); Add(TRecordStaticField.Create('b', 4, ftInteger)); Add(TRecordStaticField.Create('c', 8, ftInteger)); Add(TRecordStaticField.Create('d', 12, ftInteger)); Add(TRecordStaticField.Create('e', 17, ftString, 6)); Add(TRecordStaticField.Create('f', 24, ftSingle)); end; initialization begin RegisterStructureClass(TTestRecStructure); end; end. Wird noch verbessert. Folgende Typen sind eingebaut: ftShortint, ftSmallint, ftLongint, ftInt64, ftByte, ftWord, ftLongWord, ftSingle, ftDouble, tExtended, ftReal48, ftComp, ftCurrency, ftString, ftBinary ftBinary ist für statische Arrays oder sowas gedacht, würde ich aber momentan noch nicht empfehlen, da INI-Files sehr empfindlich bei Steuerzeichen, wie sie in Binärdaten gerne vorkommen, sind. Project1.dpr und Unit1.pas sind das Testprogramm, Test.pas ist die Unit, die das TTestRec deklariert und die TTestRecStructure bereitstellt, also den "Bauplan" von TTestRec und RecordFile.pas ist der Quellcode der verwendeten Klasse. |
Re: TRecordFile - Records per "Bauplan" in Dateien
Das speichern zumindest klappt wunderbar. Nur ein bisschen zu kompliziert ist mir das noch^^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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