Hi Corelgott,
1. Deine TBar ist TComponent und NICHT TPersistent.
2. In TPersistent waere Loaded ehedem nicht implementiert.
3. Deine SetBar benoetigt dringend eine ueberarbeitung.
4. Notification Methode fehlt...
5. ..sehr unsicher zwecks Speicher freigabe...
Delphi-Quellcode:
constructor TFoo.Create(AOwner: TComponent);
begin
inherited;
FBar := TBar.Create(Self); // Hier TBar = Class(TComponent) !!!
SetExternal := FALSE;
end;
.
.
destructor TFoo.Destroy;
begin
if (assigned(FBar) and not(SetExternal)) then FBar.Free;
inherited;
end;
.
.
procedure TFoo.SetBar(ABar:TBar);
begin
if (FBar<>ABar)
then begin
if assigned(FBar)
then begin
if SetExternal
then FBar.RemoveFreeNotification(Self)
else FBar.Free;
end;
if assigned(ABar)
then begin
FBar := ABar
FBar.FreeNotification(Self);
SetExternal := TRUE; // SetExternal = Merker ob eine andere TBar gesetzt wurde als jene, die bei Create erzeugt wurde.
end
else FBar := NIL {= ABar};
end;
end;
.
.
procedure TFoo.Notification(AComponent: TComponent; Operation: TOperation);
begin
if (Operation=opRemove)
then begin
if (AComponent=FBar) and SetExternal
then begin
// Neue TBar erzeugen und setzen
FBar := TBar.Create(Self);
SetExternal := FALSE;
end
end;
inherited;
end;
..ist mal so ins Blaue-Gehackt... sollte aber funzen...