Array einer benutzerdefinierten Klasse als Eigenschaft

7

Ich versuche, ein Array einer benutzerdefinierten Klasse als eine Eigenschaft für meine Komponente zu verwenden, aber das Problem ist, dass die Werte nicht in der Komponente gespeichert wurden, das heißt, wenn ich die Werte festlege, alles speichern und wieder öffnen Das Projekt, die Werte für die Komponente verschwindet ... Mein Code sieht wie folgt aus:

%Vor%

Ich weiß, dass nur veröffentlichte Eigenschaften gestreamt werden können, aber das Problem ist, dass meine Eigenschaft ein Array ist und nicht veröffentlicht werden kann ... Ein Vorschlag, den ich hatte, war die Verwendung von DefineProperties() , um ein benutzerdefiniertes Streaming bereitzustellen, aber ich sehe nicht, wie man das mit einem Array macht. Andere Möglichkeit, die ich dachte, war, TMyClass zu einer Art von Klasse zu modifizieren, die TMyComponent sein könnte, wie es in TChart getan wird, dem Sie verschiedene Klassen von Reihen hinzufügen können. Aber ich weiß nicht, welche Klasse das sein sollte

%Vor%

Damit könnte ich die Eigenschaft MyArray entfernen und TMyClass erstellen und zu TMyComponent wie folgt hinzufügen:

%Vor%

. Welches ist die bessere Option? Oder gibt es eine andere bessere Idee?

    
Felipe 29.05.2013, 16:24
quelle

2 Antworten

14

Die einfachste (und bevorzugte) Lösung besteht darin, TMyClass von TCollectionItem abzuleiten und TMyComponent.FMyArray zu TOwnedCollection zu ändern. Dann streamt der DFM die Elemente automatisch für Sie, und Sie erhalten native Design-Time-Unterstützung zum Erstellen und Bearbeiten von TMyClass -Objekten und ihren Eigenschaften.

Versuchen Sie Folgendes:

%Vor%     
Remy Lebeau 29.05.2013, 18:48
quelle
5

Ich würde für DefineProperties stimmen! Der erforderliche Code könnte folgendermaßen aussehen (vorausgesetzt, dass keine der Instanzen im Array den Wert nil hat):

%Vor%     
Uwe Raabe 29.05.2013 16:46
quelle

Tags und Links