AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Destroy / Entwurfzeit eigene Komponente löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Destroy / Entwurfzeit eigene Komponente löschen

Ein Thema von MarcRB75 · begonnen am 2. Apr 2024 · letzter Beitrag vom 3. Apr 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#1

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 20:58
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.

if Assigned(Owner) and (csDestroying in Owner.ComponentState) then
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Apr 2024 um 21:02 Uhr)
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#2

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 21:25
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.
Marc
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#3

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 21:35
if Assigned(Owner) and (csDestroying in Owner.ComponentState) then ..
geht leider nicht.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#4

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 22:38
Doch.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#5

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 22:40
ja, es geht schon, aber leider nicht für das, was ich vor hatte.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#6

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 22:40
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#7

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 22:43
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....
Marc
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#8

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 23:04
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#9

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 2. Apr 2024, 23:12
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?
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#10

AW: Destroy / Entwurfzeit eigene Komponente löschen

  Alt 3. Apr 2024, 04:27
Was du im BeforeDestruction machst, sollte so aber auch im Destroy gehen.

* Ausschneiden und neu einfügen, ist auch ein Löschen
* Komponente einfügen, aber dann die Form nicht speichern, ist auch ein Löschen
* Komponente löschen und nicht speichern, dann hast du sie aus der DB gelöscht, aber eigentlich ist sie noch da.
* irgendwas machen und Delphi stürzt ab, schon ist es auch wieder falsch
* nur weil BeforeDestruction aufgerufen wurde, muß es nicht sein, dass die Komponente wirklich gelöscht wird (hier irgendwo eine Exception oder Abort und schon wird Destruction nicht aufgerufen und auch nichts freigegeben)
* ...


Fazit:
* Auf Löschen und Erstellen zu reagieren, ist eine saublöde Idee, wenn es um externe Daten geht.
* Auf das Speichern der DFM Streamen der DFM zu reagieren, ist auch eine saublöde Idee. (nur weil die DFM gespeichert der Stream generiert wird, wird noch lange nicht die DFM-Datei gespeichert ... z.B. Alt+F12 oder beim automatischen Entladen, wenn man das DesignTime-Package kompiliert, seit einigen Delphi-Versionen, oder eine Exception in einer anderen Komponente, welche das Streamen/Speichern abbricht, oder ...)
* Also ab zur OpenToolsAPI (OTA) und dort "wirklich" auf das Speichern des Projektes reagieren, bzw. der Unit.


Zitat:
inherited BeforeDestruction
Am Besten nur ein pures inherited; verwenden. (auch Parameter müssen dann nicht geschrieben werden, wenn man nicht "andere" Variablen an die Parameter übergeben will, als wie oben deklariert)
* keine Fehler durch Copy&Paste-Errors (falschen Methodennamen kopiert)
* oder weil ausversehn den falschen Namen geschrieben, bzw. durch die Codevervollständigung gewählt/geändert
* oder den Code in eine andere Methode verschieben
* oder ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Apr 2024 um 10:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz