Autor Beitrag
Fingolfin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20



BeitragVerfasst: Di 01.04.03 21:52 
Hallöle, ich habe mich mal näher mit QuickRTTI beschäftigt. Damit ist es ja ganz einfach als published definierte Properties innerhalb einer Klasse zu speichern.

Wenn ich jetzt allerdings in einer Klasse ein Property anlege, das ein Array einer anderen Klasse ist, darf ich dieses Array nicht als published definieren.

(Habe das mal aus 'nem anderen Beitrag von mir geklaut)

So solls aussehen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
TTierAnsammlung=class 
 private 
  FTiere:Array of TTier; 
 function GetTier(ind:Integer):TTier; 
 procedure SetTier(ind:Integer;tier_:TTier); 
 published 
  property Tiere[ind:Integer]:TTier read GetTier write SetTier; //da haperts, ist nicht erlaubt
end;


Das ganze in public zu verschieben bringt nix, da ich dann nicht mehr QuickRTTI nutzen kann, um es einfach und schnell zu speichern.

Kann man so einen dynamischen Array als Property in einer Klasse noch anders realisieren, so daß es mit QuickRTTI geht?
Objectlists möchte ich nicht benutzen, da diese ja nicht in Kylix implementiert sind und das Prog unter beidem laufen soll.

Vielen Dank schonmal,

Fingolfin
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 02.04.03 11:28 
Hi hab mich auch mal länger mit RTTI beschäftigt...kann nicht sagen was QuickRTTI so macht, aber grundsätzlich kann mann mit RTTI keine arrays speichern! Das problem mit den sub-objekten hatte ich auch, da ich ein structur machen wollte, die TComponent ähnelt.

Lange rede kurzer sinn: hab 'ne klasse gemacht, die sämtliche props und sub-objekte in einer DFM-kompatiblen stream gespeichert, den man dann sowohl binär, als auch als DFM-text benutzen kann.

Das ganze ist sehr praktisch, da man alle( theoretisch bis 65535) objekte auf einmal speichern kann:

ausblenden Quelltext
1:
2:
obj.saveToFile(...);
obj.loadFromFile(...);



selbst redend auch 'saveToStream'...

Ich könnte dir diese klasse überlassen, wenn du nett fragst und vielleicht erzählst was du vorhast :D


edit: Hab grad gesehen, dass du et unter linux nutzen willst. Habs nicht getestet, ob RTTI etc die gleichen funktionen hat. Ist aber alles recht standartmässig. Ich teste mal zuhause ob Kylix das frisst!

_________________
mfg.
mâximôv
Fingolfin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20



BeitragVerfasst: Mi 02.04.03 20:23 
:D Also ich wäre schwer begeistert, wenn du mich da mal 'nen Blick drauf werfen lassen würdest.

Brauchen tue ich den Spaß für die neue Version meines RPG-Tools.

URL kriegst du per PN.

Mein erster Release war im März 2002 und das ist nun eine ganze Weile her.
Da ich damals noch streng strukturiert programmiert habe (und meine Ahnung von Delphi so lala war) ist der Quellcode fast nicht mehr zu verstehen und verdammt schwer zu erweitern (mal abgesehen von 'nem HD-Crash, der die Hälfte meiner Sources ins elektronische Nirvana befördert hat.
Also wollte ich auf OOP umsteigen.
Und zusätzlich den Quellcode ohne proprietäre Elemente ausstatten, da ich eine Konvertierung nach Kylix im Sinn habe.

Aber das Speichern kostet mich noch den letzten Nerv, alles von Hand zu schreiben wird n bissel viel, da ich UNZÄHLIGE :D Klassen plane.

Ich würde mich also sehr über ein wenig Hilfe (deine Klasse) freuen.

Allerdings kommt hinzu, daß ich vorher die Möglichkeit einer Versionsabrage brauche damit bei neueren Versionen mit mehr oder anderen Properties in der Klasse keine Fehler auftreten, aber ich denke der Denkanstoß aus deiner Klasse wird da sicher sehr helfen.

Fingolfin
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 03.04.03 00:45 
:D Ich hab linux damit gefüttert und er frisst es ohne einen mucks :) :lol: :D Hätte gedacht ich muss hier und da befehle anpassen...cross-platform is schon geil!

Ich schick dir die URL via PN.

Wichtig, wenn du klassen registrieren willst, dann kannst du zB. mit
ausblenden Quelltext
1:
2:
initialization
  RegisterDynaClass(TUClass  , 'Krasse klasse', 0, false);
die klasse mit diversen infos registrieren...um dann mit procedure GetDynaClasses(OnGetClass : TGetClassProc); alle infos an einen handler übergeben/abfragen zu lassen.

viel spass erstma.


PS: @VersionsKontrolle: Kannst ja die register-dings erweitern, mit versions-nummer der klasse und checken!?! Es gibt aber nur in der Delphi-IDE eine exception, bei falschen properties-namen. Bei falschen typen..keine ahnung.

_________________
mfg.
mâximôv
Fingolfin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 20



BeitragVerfasst: Do 03.04.03 20:46 
Vielen Dank für die Klasse. :D

Ich werde in den nächsten Tagen (Wochenende) mal 'nen extremen Blick reinwerfen.

Fingolfin