1

独自のクラスを作成し、それを新しいコンポーネントで使用したいのですが、エラーが発生します... コードは次のとおりです。

type
  TMyClass = class
    Name: string;
    Number: double;
  end;

  TMyComponent = class(TCustomPanel)
  private
    FMyClass: TMyClass;
  public
    procedure SetMyClass(aName: string; aNumber: double);
  published
    property MyClass: TMyClass write SetMyClass;
  end;

procedure SetMyClass(aName: string; aNumber: double);
begin
  FMyClass.Name:= aName;
  FMyClass.Number:= aNumber;
end;

プロパティに互換性のない型があるようです。理由はわかりません。

誰もそれについての手がかりを持っていますか?どうすればこの問題を解決できますか? FName と FNumber を TMyComponent のフィールドとして使用することはできません。私のコードはより複雑であり、これは私の目標を説明する簡単な例です。

ありがとう

4

3 に答える 3

0
unit MyComponentTest2;

interface

uses SysUtils, Classes, Controls, Forms, ExtCtrls, Messages, Dialogs;

type
  TMyClass = class
    Name: string;
    Number: double;
  end;

  TMyComponentTest2 = class(TCustomPanel)
  private
    FMyClass: TMyClass;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure SetMyClass(Value: TMyClass);
  published
    property MyClass: TMyClass read FMyClass write SetMyClass;
  end;

procedure Register;

implementation

constructor TMyComponentTest2.Create(AOwner: TComponent);
begin
  Inherited Create(AOwner);
  FMyClass:= TMyClass.Create;
end;

destructor TMyComponentTest2.Destroy;
begin
  Inherited;
  FMyClass.Free;
end;

procedure TMyComponentTest2.SetMyClass(Value: TMyClass);
begin
  FMyClass.Name:= Value.Name;
  FMyClass.Number:= Value.Number;
end;

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyComponentTest2]);
end;

end.
于 2013-05-07T12:50:36.113 に答える