1

カスタム クラスから派生したプロパティを含む次のコンポーネントがあります。

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.

正常に動作しますが、設計時にプロパティの値を設定してプログラムを実行すると、値が消えます。コンポーネントの値を設定し、すべてを保存し、ロードすると値がもう存在しない場合に発生する同じ問題...

問題は、カスタム クラスのインスタンスを常に作成しているためだと思いますが、よくわかりません。それを回避する方法もわかりません。私に何ができるか考えている人はいますか?

4

2 に答える 2