Bileşenimin bir özelliği olarak bir özel sınıf dizisini kullanmaya çalışıyorum, ancak sorun değerlerin bileşene kaydedilmemesi, yani bileşeni kaybolur değerleri, değerleri her şeyi kaydetmek ve tekrar projeyi açmak ... Benim kod aşağıdaki gibi görünür:Özellik olarak bir özel sınıf dizisi
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.
sadece yayınlanmış özellikleri akış edilebileceğini biliyoruz ama sorun olduğunu Benim mülk bir dizidir ve yayınlanamaz ...Bir öneri, özel bir akış sağlamak için DefineProperties()
kullanmaktı, ancak bunu bir diziyle nasıl yapacağımı göremiyorum. TMyClass'ın bir üst sınıf olabileceğini düşündüğüm başka bir olasılık da, TMyComponent'in kendisi gibi farklı bir sınıf sınıfını ekleyebileceğiniz TChart'da olduğu gibi bir üst sınıfı olabileceğini düşündüm. Ama bu ben mülkiyet BenimDizim çıkarıp TMyClass oluşturun ve aşağıdaki şekilde TMyComponent eklemek verebilecek ile
TMyClass=class(T???????????)
olmalıdır hangi sınıf bilmiyorum:
MyArray1.parent:= MyComponent1;
MyArray2.parent:= MyComponent2;
...
. Hangisi daha iyi bir seçenek? Yoksa başka bir fikri daha var mı?
Bu sürümü test ettim ve iyi çalışıyor, sadece biraz daha karmaşık olan gerçek kodumu test etmeliyim, çok teşekkürler – Felipe
Aynı şeyi arıyordum. Remy'den harika cevap, çok teşekkür ederim. –