Eine ziemlich bequeme Möglichkeit wäre es, die Klassen von
TComponent
abzuleiten und mit
FreeNotification
zu arbeiten. Das könnte dann in etwa so aussehen:
Delphi-Quellcode:
type
TValues = class(TComponent)
public
x: Double;
y: Double;
end;
TTest = class(TComponent)
public
Name: String;
private
FValues: TValues;
procedure SetValues(const Value: TValues);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
property Values: TValues read FValues write SetValues;
end;
procedure TTest.Notification(AComponent: TComponent; Operation: TOperation);
begin
if (AComponent = FValues) and (Operation = opRemove) then
FValues := nil;
inherited;
end;
procedure TTest.SetValues(const Value: TValues);
begin
if FValues <> Value then
begin
if FValues <> nil then
FValues.RemoveFreeNotification(Self);
FValues := Value;
if FValues <> nil then
FValues.FreeNotification(Self);
end;
end;
Die verbleibenden public Fields würde ich aber gleich auch noch in Properties umwandeln.