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 gesetzt die Werte, alles speichern und wieder öffnen Sie das Projekt, um die Werte für die Komponente ... Mein Code verschwindet sieht wie folgt aus:Array einer benutzerdefinierten Klasse als Eigenschaft
unit Unit1;
interface
uses Windows, ExtCtrls,Classes,Controls;
type
TMyClass=class(TPersistent)
private
FName: string;
FValue: double;
public
property Name: string read FName write FName;
property Value: double read FValue write FValue;
end;
TMyComponent= class(TCustomPanel)
private
FMyArray: array[0..200] of TMyClass;
function GetmyArray(Index: Integer): TMyClass;
procedure SetMyArray(index: Integer; Value: TMyClass);
public
property myArray[index: Integer]: TMyClass read GetMyArray write SetMyArray;
end;
implementation
function TMyComponent.GetmyArray(Index: Integer): TMyClass;
begin
result:= FmyArray[Index];
end;
procedure TMyComponent.SetMyArray(index: Integer; Value: TMyClass);
begin
FMyArray[index].FName:= Value.FName;
FMyArray[index].FValue:= Value.FValue;
end;
end.
ich weiß, dass nur die veröffentlichten Eigenschaften gestreamt werden können, aber das Problem ist, dass meine Eigenschaft ist ein Array und es kann nicht veröffentlicht werden ... Ein Vorschlag, den ich hatte, war, DefineProperties()
zu verwenden, um ein kundenspezifisches streaming zu liefern, aber ich sehe nicht, wie man das mit einem Array tut. Andere Möglichkeit, die ich dachte, war, TMyClass zu einer Art von Klasse zu ändern, die TMyComponent könnte das Elternteil davon sein, wie es in TChart getan wird, dem Sie verschiedene Klassen von Serien hinzufügen können. Aber ich weiß nicht, was Klasse dies, dass sein sollte
TMyClass=class(T???????????)
Mit mir die Eigenschaft MyArray nehmen könnte und TMyClass erstellen und zu TMyComponent wie die folgenden hinzu:
MyArray1.parent:= MyComponent1;
MyArray2.parent:= MyComponent2;
...
. Welches ist die bessere Option? Oder gibt es eine andere bessere Idee?
Ich habe diese Version getestet und es funktioniert gut, ich muss nur in meinem echten Code testen, der ein bisschen komplexer ist, vielen Dank – Felipe
War auf der Suche nach der gleichen Sache. Tolle Antwort von Remy, vielen Dank. –