Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Destroy / Entwurfzeit eigene Komponente löschen (https://www.delphipraxis.net/214904-destroy-entwurfzeit-eigene-komponente-loeschen.html)

MarcRB75 2. Apr 2024 20:38

Destroy / Entwurfzeit eigene Komponente löschen
 
Hallo,

folgendes Beispiel:
ich habe eine eigene Komponente, diese installiert.

Auf einem Form platziere ich diese Komponente.
Wenn ich das Form schließe - Entwurfszeit oder wenn die EXE-Datei geschlossen wird, wird
ja destroy aufgerufen.

Aber gibt es eine Möglichkeit zu prüfen, ob die Komponente destroy aufruft, weil das Form geschlossen wurde
oder destroy aufgerufen wird, weil man z.B. Entf-Taste oder im Entwurfszeit-Menü die Komponente entfernt/löscht.

In beiden Fällen wird ja destroy aufgerufen mit dem Unterschied, dass einmal die Komponente wirklich "gelöscht, weg ist" und bei
dem anderen mal, beim einfachen schließen in der Entwicklungsebene, die Komponente nicht "richtig" gelöscht wird, sie ist ja beim nächsten mal
öffnen wieder da.

Ich hoffe, ich hab das irgendwie verständlich ausgedrückt.
Vielleicht weiß ja jemand, was ich meine und könnte mir da bitte weiterhelfen.

Vorab vielen Dank.
Marc

himitsu 2. Apr 2024 20:58

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Und was soll das für einen Unterschied machen, bzw. wozu muß man das wissen?
Die Komponente wird so oder so freigegeben, hat all ihre Ressourcen freizugeben und hat eigentlich nichts zu tun, außer gelöscht zu werden.

Delphi-Quellcode:
if Assigned(Owner) and (csDestroying in Owner.ComponentState) then

MarcRB75 2. Apr 2024 21:25

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Vielen Dank für Deine Antwort.
Ich probiere das gleich mal aus.

Nun, ich möchte "neue" Komponenten in die Datenbank schreiben, wenn diese in der Entwurfszeit auf dem Formular plaziert werden.

Diese Komponenten soll Festlegungen in der Laufzeit speichern, wenn diese in der EXE bearbeitet wird und später, wenn das Form wieder erzeugt wird,
sollen automatisch die Festlegungen aufgerufen werden. Ja natürlich kann/könnte man das auch anders lösen, aber ich wollte es
in die Datenbank schreiben, vor allem, weil einige Festlegungen getätigt werden können und damit andere Funktionen jeweils verbunden sind.

Beim Erzeugen des Form wird die DB aufgerufen, sucht nach dem Namen der Komponente und lädt alle Festlegungen auf.

Wenn in der Entwurfszeit jetzt eine Komponente gelöscht wird, soll auch automatisch die gespeicherte Komponente/Name aus der DB gelöscht werden.
Die anderen bleiben erhalten und sollen nicht gelöscht werden.
Deshalb müsste unterschieden werden, ob die Komponente "manuell", also in der Entwurfszeit gelöscht wurde oder während dessen, wenn die EXE selbst bzw. die Entwurfszeit geschlossen wird.

MarcRB75 2. Apr 2024 21:35

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
if Assigned(Owner) and (csDestroying in Owner.ComponentState) then ..
geht leider nicht.

himitsu 2. Apr 2024 22:38

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Doch.

MarcRB75 2. Apr 2024 22:40

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
ja, es geht schon, aber leider nicht für das, was ich vor hatte.

Uwe Raabe 2. Apr 2024 22:40

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Beim Schreiben der DFM hat eine TComponent das csWriting in ComponentState. Das könnte ein Trigger für das Create/Update in der DB sein.

Aber wie bekommt man das da wieder raus, sollte die Komponente dann mal aus dem Form wieder gelöscht werden?

MarcRB75 2. Apr 2024 22:43

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Vielen Dank für Deine Antwort.
Er schreibt alles wunderbar in die Datenbank. Das passt.
Aber wenn manuell während der Entwurfszeit die Komponente gelöscht wird, sei es mit der Entf-Taste/Strg.+X müsste das vorher abgefangen werden,
damit er beim destroy weiß ... diese Komponente muss aus der DB gelöscht werden. So meinte ich das eigentlich....

Uwe Raabe 2. Apr 2024 23:04

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Nur so ins Blaue: Du könntest ComponentState auf csDestroying testen und das auch für Owner tun. Wenn letzteres nicht der Fall ist, wird nur die Komponente freigegeben.

MarcRB75 2. Apr 2024 23:12

AW: Destroy / Entwurfzeit eigene Komponente löschen
 
Danke für den Tipp... jaaa... das hatte ich mir auch schon überlegt... aber owner wird doch nach der Componente "zerstört", somit wird owner nicht den Status der Zerstörung haben, ober? Oder erhält owner den Status der Zerstörung, wenn zuerst andere Componenten "zerstört" werden müssen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz