Einzelnen Beitrag anzeigen

Benutzerbild von LoCrux
LoCrux

Registriert seit: 5. Mär 2007
Ort: Gwang-Yang-City
48 Beiträge
 
Delphi 2009 Enterprise
 
#2

Re: TPersistent in TComponent...

  Alt 20. Mai 2008, 01:59
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...
“C++ is an insult to the human brain.” [Niklaus Wirth]

2B OR NOT 2B (.. THAT IS FF)
  Mit Zitat antworten Zitat