Sto tentando di utilizzare una matrice di una classe personalizzata come proprietà per il mio componente, ma il problema è che i valori non sono stati salvati nel componente, il che significa che se imposto i valori, salvare tutto e aprire nuovamente il progetto, i valori per la componente scompare ... il mio codice è simile al seguente:Matrice di una classe personalizzata come proprietà
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.
so che che le proprietà solo pubblicati possono essere trasmessi, ma il problema è che la mia proprietà è una matrice e non può essere pubblicata ... Un suggerimento che avevo era di usare DefineProperties()
per fornire uno streaming personalizzato ma non vedo come farlo con un array. Un'altra possibilità che pensavo fosse di modificare TMyClass in un tipo di classe che TMyComponent potrebbe essere il genitore di esso, come è fatto in TChart, che è possibile aggiungere diverse classi di serie ad esso. Ma non so cosa classe questo dovrebbe essere
TMyClass=class(T???????????)
Con che avrei potuto prendere il MyArray proprietà e creare TMyClass e aggiungere al TMyComponent come il seguente:
MyArray1.parent:= MyComponent1;
MyArray2.parent:= MyComponent2;
...
. Qual è l'opzione migliore? O c'è qualche altra idea migliore?
Ho provato questa versione e funziona bene, devo solo testare il mio codice reale che è un po 'più complesso, grazie mille – Felipe
Cercavo la stessa cosa. Ottima risposta da Remy, grazie mille. –