- 締切済み
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の変更を知りたいということです。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- inetd
- ベストアンサー率23% (43/184)
それは素直に ClassA に FMemberA をセットする手続きを作れば良いのでは? なぜ ClassB でやる必要があるんですか?
補足
procedure TClassA.SetMemberA(Value: Integer); begin FMemberA:=Value; //<<ここ?>> end; の「ここ?」の部分に書けばよいとのことでしょうか? 実現したいのは、質問の文の「したい処理」の部分で、ClassBのメンバーにアクセスする処理です。 これはClassAの中で書くことはできませんし、上の形にしてもClassBのSetMemberは呼び出されませんよね?たしかクラスなのでアドレスが入ってるだけなのでアドレスが変わらない以上は… もしかして根本的なところで勘違いしてますか?