![]() |
FreeandNilProperties?
Hi,
die Überschrift sagt ja nicht viel aus, aber: Gibt es etwas, was beim Freigeben (z. B. eines Panels) auch die "Unterkomponenten" davon nicht nur frei gibt, sondern auch auf Nil setzt? Oder wie kann man das am günstigsten machen (also ohne alle Komponenten vorher per Hand freigeben und auf nil setzen zu müssen)? ("FreeandNilProperties" gibt's übrigens wirklich. Aber leider...) Gruß Mattze |
Re: FreeandNilProperties?
ich denke nicht, dass das so direkt geht, da es durchaus momente gibt, in denen du die "unterkomponenten" auch noch brauchen kannst. wird wohl eigene arbeit von nöten sein, d.h. nachschauen, ob eine komponente auf z.b. einem panel liegt und es dann entsprechend auch freigeben.
|
Re: FreeandNilProperties?
Zitat:
|
Re: FreeandNilProperties?
Hi,
nun, freeandnilproperties macht das für Objekte. Die Hilfe schreibt aber: "AObject (der Parameter - d. Red.) muss ein CLX-Objekt sein, das mit RTTI (Laufzeittypinformation) compiliert wird." Theoretisch könnte man auch die Komponentenliste durchlaufen und selber alles (was geht) freigeben und auf nil setzen. Ist bloß ziemlicher Aufwand für die Laufzeit. Ich frage mich, wie das zeitmäßig am günstigsten ist... Ich habe z. B. ein Panel auf dem "duzenderweise" verschiedene andere Komponenten erzeugt werden. Und zwar zu verschiedenen Zeitpunkten verschiedene. Mal ein MPlayer, mal ein Image, mal ein OLE-Container, mal ein Richedit usw. Diese Dinger müssen "genilt" werden, wenn ich das Panel freigebe. Man kann zwar für jede mögliche Komponente im Destroy ein freeandnil geben, aber dann macht man das 99 mal sinnlos und nur einmal korrekt... Und woanders gebe ich nur etwas frei, was an dieser Stelle nicht benutzt wird. Da muss dann auch wieder eine Liste von freeandnil stehen. Alles sehr unelegant! Es wäre schön, wenn ich das "in einem Rutsch" erledigen könnte. Deswegen meine Frage! (Aber eigentlich auch Quatsch, weil es intern ja auch nix anderes wäre als das freeandnil für jede mögliche Komponente aufzurufen. Dann muss ich mir die Schreibarbeit halt machen...) Gruß Mattze |
Re: FreeandNilProperties?
Wenn schon dynamisch, dann komplett. Weise alle Komponenten auf dem Panel das Panel als Owner zu.
|
Re: FreeandNilProperties?
Hi Matze,
Zitat:
Oder habe ich Deine Anfrage missverstanden? Gruß, SirTwist |
Re: FreeandNilProperties?
Hallo,
nun, ich will damit genau das bezwecken, was ich geschrieben habe. Diese Komponenten auf dem Panel MÜSSEN beim Freimachen auf nil werden! Sonst greife ich später durch Parallelverarbeitung auf diese Komponenten zu. Das ist anders nicht zu lösen! (Die Panelkomponenten, die nicht nil sein müssen, "nile" ich auch nicht!) Mit einer Objektlist muss ich das gleiche machen, was ich eigentlich nicht wollte, nun aber dann doch machen werde: Eine längere Liste von freeandnil vor dem freeandnil des Panels. (Außerdem würde die Objektlist hier wahrscheinlich nicht passen. Das wäre "den Teufel mit dem Belzebub austreiben". Sprich: Das wäre letztendlich viel mehr als nötig.) Gruß Mattze |
Re: FreeandNilProperties?
ein FreeAndNil kann nie von der Komponente ausgehen da diese nicht wissen kann wo überall Pointer auf die Instanz liegen.
Beispiel:
Delphi-Quellcode:
var
a,b,c,d,e,f,g: TYourObject; [...] a := TYourObject.Create(); b := a; c := a; d := a; e := a; f := a; g := a; [...] destructor TYourObject.Destroy(); begin //woher soll die Objectinstanz an der Stelel wissen das es a,b,c,d,e,f und g gibt? inherited; end; |
Re: FreeandNilProperties?
Wie schon mal geschrieben, wenn schon dynamisch, dann vollständig dynamisch! Die kennt ja nicht die Referenzvariablen, die Teil einer anderen Klasse sind, welche sie referenzieren.
|
Re: FreeandNilProperties?
Du hast also an mehreren Stellen Pointer auf Deine Unterkomponenten gespeichert? Nun, das geht wirklich nicht, die alle auf nil zu setzen, dafür musst Du schon in deiner Programmlogik sorgen. Das ist aber insgesamt Topfschlagen im Minenfeld: wie stellst Du sicher, dass Du nicht an mehreren Stellen auf das selbe Objekt ein FreeAndNil() ausführst?
In lokalen Variablen okay, aber global in mehreren Variablen Pointer auf jeweils dieselben Objekte zu speichern, ist ähm sehr gewagt. Gruß, SirTwist |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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