プロが教えるわが家の防犯対策術!

プロパティにクラス型を設定した場合、セットされたことを認識するにはどうすればいいのでしょう?
言葉では伝えにくいので、ソースコードで。

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の変更を知りたいということです。
よろしくお願いします。

A 回答 (1件)

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

すか?

この回答への補足

procedure TClassA.SetMemberA(Value: Integer);
begin
 FMemberA:=Value;
//<<ここ?>>
end;

の「ここ?」の部分に書けばよいとのことでしょうか?

実現したいのは、質問の文の「したい処理」の部分で、ClassBのメンバーにアクセスする処理です。
これはClassAの中で書くことはできませんし、上の形にしてもClassBのSetMemberは呼び出されませんよね?たしかクラスなのでアドレスが入ってるだけなのでアドレスが変わらない以上は…
もしかして根本的なところで勘違いしてますか?

補足日時:2003/11/08 19:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!