カスタム クラスから派生したプロパティを含む次のコンポーネントがあります。
unit MyComponentTest3;
interface
uses Windows, ExtCtrls,Classes,Controls;
type
TMyClass3 = class
myString: string;
myNumber: double;
end;
TMyComponentTest3 = class(TCustomPanel)
private
FMyProperty: TMyClass3;
procedure SetMyProperty(Value: TMyClass3);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetMyPropertyPublic(AmyString: string; AmyNumber: double);
published
property MyProperty: TMyClass3 read FMyProperty write SetMyProperty;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TMyComponentTest3]);
end;
{ TMyComponentTest3 }
constructor TMyComponentTest3.Create(AOwner: TComponent);
begin
inherited;
FMyProperty:= TMyClass3.Create;
end;
destructor TMyComponentTest3.Destroy;
begin
FMyProperty.Free;
inherited;
end;
procedure TMyComponentTest3.SetMyProperty(Value: TMyClass3);
begin
with FMyProperty do
begin
myString:= Value.myString;
myNumber:= Value.myNumber;
end;
end;
procedure TMyComponentTest3.SetMyPropertyPublic(AmyString: string;
AmyNumber: double);
var
auxMyProperty: TMyClass3;
begin
auxMyProperty:= TMyClass3.Create;
with auxMyProperty do
begin
myString:= AmyString;
myNumber:= AmyNumber;
end;
SetMyProperty(auxMyProperty);
auxMyProperty.Free;
end;
end.
正常に動作しますが、設計時にプロパティの値を設定してプログラムを実行すると、値が消えます。コンポーネントの値を設定し、すべてを保存し、ロードすると値がもう存在しない場合に発生する同じ問題...
問題は、カスタム クラスのインスタンスを常に作成しているためだと思いますが、よくわかりません。それを回避する方法もわかりません。私に何ができるか考えている人はいますか?