Events über Zerstörung von Komponenten



  • Hallo Community,

    ich bin gerade am grübeln, wie sich nochmal der Mechanismus nannte, mit dem Objekte auf die Zerstörung eines anderen Objekts lauschen konnten.

    Also natürlich nicht das OnCreate/OnDestroy. Die Standard-Komponenten reden ja auch alle auf diese Art und Weise miteinander (ich entferne eine DataSource und das DBControl bekommt's mit z.B.). Ich hoffe es ist klar geworden, was ich meine. 🙂

    Ich habe gerade leider keinen Builder zur Hand, sonst würd ich's in der VCL nachschauen. So weiß ich aber gerade auch nicht, wonach ich jetzt suchen soll. 😞

    Viele Grüße



  • 7H3 N4C3R schrieb:

    Also natürlich nicht das OnCreate/OnDestroy. Die Standard-Komponenten reden ja auch alle auf diese Art und Weise miteinander (ich entferne eine DataSource und das DBControl bekommt's mit z.B.). Ich hoffe es ist klar geworden, was ich meine. 🙂

    In diesem Fall ist es nicht irgendein Automatismus, sondern manuell implementiert:

    destructor TDataSource.Destroy;
    begin
      FOnStateChange := nil;
      SetDataSet(nil);
      while FDataLinks.Count > 0 do RemoveDataLink(FDataLinks.Last); // hier
      FDataLinks.Free;
      inherited Destroy;
    end;
    

    7H3 N4C3R schrieb:

    Ich habe gerade leider keinen Builder zur Hand, sonst würd ich's in der VCL nachschauen. So weiß ich aber gerade auch nicht, wonach ich jetzt suchen soll. 😞

    Du könntest ja mal hier reinschauen 😉 Dort findest du z.B. TComponent::Notification() und, für extremere Fälle, TComponent::FreeNotification().



  • Hallo

    Wenn du VCL-unabhängige Mechanismen verwenden willst dann schau dir das Design Pattern "Observer" an.

    bis bald
    akari



  • Ah Notification, bzw. in meinem Fall FreeNotification war das was ich suchte, danke! 🙂

    Ein eigenes Observerkonzept geht hier für mich nicht, da ich nur maximal TForm kenne, die Form von meiner Klasse nichts wissen darf und meine eine Standard-C++ Klasse ist, kein TComponent-Derivat. Außerdem will ich nicht, dass die Form(s - es sind mehrere) das Objekt, was die Zerstörung überwacht, mitzerstören, also der Owner sind. Owner könnte ja eh nur ein Objekt, nicht mehrere sein.

    Problematik ist, dass die Forms möglicherweise anderweitig zerstört werden können, das kann ich nicht verbieten. Und meine Klasse, die die Forms verwaltet, muss das wieder irgendwie mitbekommen, damit sie keine ungültigen Zeiger hält.


Anmelden zum Antworten