Массив пользовательского класса как свойство
Я пытаюсь использовать массив пользовательского класса в качестве свойства для моего компонента, но проблема в том, что значения не были сохранены в компоненте, что означает, что если я установлю значения, сохраню все и снова открою проект, значения для компонента исчезают ... Мой код выглядит следующим образом:
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.
Я знаю, что только опубликованные свойства могут быть переданы в потоковом режиме, но проблема в том, что мое свойство является массивом, и его нельзя публиковать ... Предложение, которое я имел, было использоватьDefineProperties()
обеспечить пользовательский поток, но я нене вижу, как это сделать с массивом. Другая возможность, о которой я подумал, состояла в том, чтобы модифицировать TMyClass в своего рода класс, родителем которого мог бы быть TMyComponent, как это сделано в TChart, с помощью которого вы можете добавлять к нему различные классы рядов. Но я нене знаю, какой это должен быть класс
TMyClass=class(T???????????)
После этого я мог бы вынуть свойство MyArray, создать TMyClass и добавить его в TMyComponent следующим образом:
MyArray1.parent:= MyComponent1;
MyArray2.parent:= MyComponent2;
...
, Какой из них лучше? Или есть другая идея получше?