Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Wie ich mitbekommen habe giebt es hier einige die sich mit RTTI auseinandergesetzt haben villeicht könnt ich mir helfen:
Ich möchte die Typeinformation von einem record haben z.B :
Code:
Type
TVector3f =record
X, Y , Z :Single
End;
TMyClass =class(TPersistent)
FV : TVector3f;
published
property V : TVector3f read FV write FV;
End;
wenn das nicht geht wie würdet ihr das machen
1) statt record eine Klasse verwenden
2) die einzelnen Felder des Records als propertys deklarieren
3) ???
Zuletzt geändert von FrenK am So Jul 06, 2008 20:32, insgesamt 2-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Records haben keine Typinformationen. Das geht also nicht.
Und wie man das machen kann hast du schon gesagt. Allerdings hängt das ja schließlich davon ab was du machen willst. Denn Vektoren als Klassen können mitunter einen Nachteil haben, denn schließlich ist es eine doch ziemlich kleine Struktur und wenn du diese Vektoren überall benutzt hättest du dauerhaft den OOP Overhead den du mit schleppen müsstest. Und die Daten wären nicht mehr an einem Stück. Außer evtl. über eine nur public Eigenschaft der Klasse. Allerdings als Eigenschaft in einem ObjectInspector ist eine Klasse sicherlich besser. Dann hättest du ein seperates Feld und Untereigenschften. Würde zu mindest das Handling wärend der Entwicklung verbessern.
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Es geht mir darum ich hab meine Kallse zum auslesen von propertys...und z.B eine Font Klasse diese hat eigenschafte wie Farbe was bei mit bislang ein RGBA Record war weitere Beispiele wären Positionsangaben von GUI Elementen usw. und da ich mich entscheiden kann wie ichs machen soll.. wie würdet ihrs machen??
nur ma ne Frage warum giebt es eigentlich dann bei TTypeKinds tkRecord?? Ist das dann nicht vollkommen überflüssig??
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein. Dann weisst du, dass es ein Record ist.
Wenn du sowas wie den Object Inspector schreiben willst, bleiben dir wirklich nur Klassen für sowas. So ist es ja auch in der VCL gelöst: Alles, was im Objektinspektor auftauchen soll, muss ne Klasse sein (oder eben sowas wie Integer oder String).
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Eben nicht denn ich erhalte nie auch nur einen Datensatz mit tkRecord egal obwohl ich einen bekommen müsste von daher wird die Frage...ist ja auch egal...
meine eigentliche frage war
1) statt record eine Klasse verwenden
2) die einzelnen Felder des Records als propertys deklarieren
was ist besser und tut mir leid aber ich verstehe deine antwort so indem du mir sagst beides geht das hilft mir aber nicht weiter
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich denke, was von dem beiden du machst, hängt von dem Einsatzgebiet ab.
Die Position eines GUI-Elementes beispielsweise würde ich direkt auf Ebene des Elementes, also als Properties der Klasse des GUI-Elementes deklarieren. Denn dafür extra ne Klasse anzulegen und zu initialisieren halte ich für zu umständlich.
Wenn es aber um mehrere Einstellungen wie zum Beispiel die Größe, Art und Form einer Schriftart geht, dann würde ich dafür eine extra Klasse verwenden, die die Schriftart beschreibt.
Du musst es auch aus dem Aspekt sehen, ob es sinnvoll ist, diese Daten einzeln weiterzugeben. Für eine Schriftart zum Beispiel ist es sinnvoll, wenn man sie einzeln zuweisen kann, also ohne gleich das ganze GUI-Element und gleichzeitig ohne viele einzelne Eigenschaften zu kopieren, also direkt indem man nur die Schriftart kopiert. Bei der Position macht das aus zwei Gründen meiner Meinung nach keinen Sinn: Erstens hat man da nur zwei werte und zweitens ist es eher selten, dass man zwei Elemente an der gleichen Position haben will und dann ist das Kopieren von zwei Werten auch nicht zu viel verlangt.
Ich hoffe, das hilft dir jetzt etwas weiter.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.