• 締切済み

Delphiのプロパティでのクラス型の取得

プロパティにクラス型を設定した場合、セットされたことを認識するにはどうすればいいのでしょう? 言葉では伝えにくいので、ソースコードで。 TClassA = class private  FMemberA: Integer; public  property MemberA: Integer read FMemberA write FMemberA; end; TClassB = class private  FMember: TClassA;  procedure SetMember(Value: TClassA); public  constructor Create;override;  property Member: TClassA read FMember write SetMember; end; constructor TClassB.Create; begin  FMember:=TClassA.Create; end; procedure TClassB.SetMember(Value: TClassA); begin  FMember:=Value;  //<<したい処理>> end; とあって、 var Test:TClassB; begin  Test:=TClassB.Create;  Test.Member.MemberA:=5; ・・・ としたとき、TClassBのメンバーであるMemberはクラス型であるため、SetMemberは呼び出されないと思うのですが、このときに上の「したい処理」の部分のように処理を実行するにはどうすればよいのでしょうか? イメージでは、 Button.Font.Size:=10; のような感じの時に、Button側でFontの変更を知りたいということです。 よろしくお願いします。

みんなの回答

  • inetd
  • ベストアンサー率23% (43/184)
回答No.1

それは素直に ClassA に FMemberA をセットする手続きを作れば良いのでは? なぜ ClassB でやる必要があるんですか?

cias
質問者

補足

procedure TClassA.SetMemberA(Value: Integer); begin  FMemberA:=Value; //<<ここ?>> end; の「ここ?」の部分に書けばよいとのことでしょうか? 実現したいのは、質問の文の「したい処理」の部分で、ClassBのメンバーにアクセスする処理です。 これはClassAの中で書くことはできませんし、上の形にしてもClassBのSetMemberは呼び出されませんよね?たしかクラスなのでアドレスが入ってるだけなのでアドレスが変わらない以上は… もしかして根本的なところで勘違いしてますか?