Autor |
Beitrag |
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Mi 18.12.02 11:25
Hallo,
wie gesagt, ich möchte gern herausfinden, wann eine beliebige zerstört wird. Bei TForm gibt es ja OnDestroy. Aber wie sieht es mit anderen Komponenten aus?
Wie kann ich für diese Komponenten ein OnDestroy erstellen?
_________________ If accidentally read, induce vomitting.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Mi 18.12.02 12:52
Für was für Komponenten möchtest du denn noch ein OnDestroy Ereignis erstellen? Für Buttons od. Memo z.b.?
Ich denke mal, das ist zwar weniger nötig, aber es müßte gehen, wenn du
von höheren Klassen dieses Ereignis ableitest und überschreibst.
Hab selber noch nicht so viel Erfahrung mit der Komponentenentwicklung
aber ich wette mal, daß OnDestroy od. OnClose in allen KlassenObjekten vorhand ist. Müßte ja eigentlich schon in TObject sein...
Aber wenn das jemand besser weiß, dann bitte verbessert mich 
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Mi 18.12.02 13:30
Hallo,
zerstört erst, wenn man Free aufruft. Für Komponenten gibt es kein OnDestroy. Dieses Ereignis gibt es nur für Formulare.
Bei Komponenten muss man den destructor Destroy überschreiben.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Mi 18.12.02 13:34
Hab grad mal nachgeschaut.
Im TObject gibt es die Methode Free.
Zitat: |
Mit Free wird ein Objekt freigegeben. Wenn die Objektreferenz nicht
nil ist, wird Destroy aufgerufen.
|
Such mal in der Hilfe im Index nach "TObject,Free", dann findest ne genaue Beschreibung.
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
Andreas.Schmid
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 18.12.02 13:35
Titel: Normalerweise nach dem OnDestroy vom Formular
Bei allen Visuellen Komponenten gibt es die Möglichkeit ein OnDestroy Ereignis zu generieren, dass ist allerdings sehr kompliziert und ich weiß leider auch nicht genau wie das funktioniert.
In TForm und allen Nachfahren gibt es ein "OnDestroy"-Ereignis. Du könntest also dort deine Code platzieren.
Also die Komponeten auf dem Formular werden in der Regel nach dem "OnDestroy"-Ereignis des Formulars freigegeben, sodass man mit den Componenten nach etwas machen kann.
Was willst du überhaupt darin machen, vielleicht gibt es auch eine andere Lösung für dein Problem?
_________________
Noch viel Spaß!!!
Andreas Schmid
|
|
Ex0rzist 
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Mi 18.12.02 14:01
Erstmal danke für die zahlreichen Antworten.
@Andreas.Schmid
Ich brauche es eigentlich nur zum Debuggen. Mein Problem ist, das ich ein Memo habe, das von dem Formular "abgedockt" ist (Floating = True).
Wenn ich nun die Anwendung schließe, soll der Text in dem Memo noch schnell gespeichert werden. Es kommt dabei aber zu einer Exception, da bei der Speichern-Prozedur im OnDestroy des Formulars das Memo bereits nil ist.
Und deshalb wollte ich wissen, wann genau dieses Memo zerstört wird. 
_________________ If accidentally read, induce vomitting.
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Mi 18.12.02 14:36
Hallo,
dann schau Dir einmal das Ereignis OnClose an.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Ex0rzist 
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Mi 18.12.02 15:15
Jetzt klappt es.
Das OnClose kam für mich erst nicht in Frage, da im OnCloseQuery CanClose := False war.
Ich habe einfach eine zusätzliche globale (ich weiss - *pfui*  ) Variable eingeführt, mit der ich dann überprüft habe, ob die Form geschlossen werden kann.
Vorher hatte ich die Form trotz CanClose := False; mit Application.Terminate; geschlossen (nochmal *pfui*).
Aber mit dem OnClose war ein guter Hinweis.
Danke nochmal.
_________________ If accidentally read, induce vomitting.
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 18.12.02 21:14
Tststs, und Deine globale Variable verhindert das Application.Terminate ?
Würde mich jetzt echt interresieren WIE !
Anstatt hier Pfuis zu generieren solltest mal überlegen, ob es nicht andere (sauberere) Wege gibt. Das OnClose ist ja genau für solche Zwecke integriert worden!
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Ex0rzist 
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Do 19.12.02 00:53
Wolff68 hat folgendes geschrieben: | Tststs, und Deine globale Variable verhindert das Application.Terminate ? |
Nein, tut sie nicht. Aber mit ihrer Hilfe benötige ich kein Application.Terminate mehr.
Wolff68 hat folgendes geschrieben: | Anstatt hier Pfuis zu generieren solltest mal überlegen, ob es nicht andere (sauberere) Wege gibt. Das OnClose ist ja genau für solche Zwecke integriert worden! |
Das habe ich ja auch getan. Das OnClose wurde bei mir leider nur in einem bestimmten Fall ausgelöst, ansonsten war CanClose = False;.
Es tut mir leid, wenn ich in irgendeiner Weise deine Gefühle verletzt haben sollte, aber ich kann so viele Pfuis generieren, wie ich möchte. Meine Programme sind ausschließlich für den Privatgebrauch.
Natürlich gibt es immer eine bessere Variante, aber ich bin erstmal froh, das alles so klappt, wie ich möchte.
_________________ If accidentally read, induce vomitting.
|
|