Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zur Laufzeit erzeugte Elmente loschen
delphistart - Fr 22.12.06 17:45
Titel: Zur Laufzeit erzeugte Elmente loschen
Ich mochte gerne ein Element, dass zur Laufzeit erzeugt wird wieder löschen. Wie kann ich das machen?
So wird das Element erzeugt:
Delphi-Quelltext
1:
| arrLabel1[count]:=TLabel.Create(self); |
mkinzler - Fr 22.12.06 18:00
Delphi-Quelltext
1:
| arrLabel1[count].Free; |
delphistart - Fr 22.12.06 18:27
mkinzler hat folgendes geschrieben: |
Delphi-Quelltext 1:
| arrLabel1[count].Free; | |
Noch eine Frage: Wo ist der Unterschied zwischen Free und FreeAndNil?
mkinzler - Fr 22.12.06 18:30
FreeAnNil() setzt die Instanzvariable anschließend auf Nil
delphistart - Fr 22.12.06 18:33
mkinzler hat folgendes geschrieben: |
| FreeAnNil() setzt die Instanzvariable anschließend auf Nil |
Und was ist Nil? :?
mkinzler - Fr 22.12.06 18:34
Nil ist das Delphigegenstück zu NULL. Das bedeutet soviel wie nicht definiert.
Marc. - Fr 22.12.06 19:20
Nil = Not In List ;)
Kroko - Fr 22.12.06 19:53
mkinzler hat folgendes geschrieben: |
Delphi-Quelltext 1:
| arrLabel1[count].Free; | |
Wenn Du
Delphi-Quelltext
1:
| arrLabel1[count].Parent := Form1; |
setzt, kümmert sich das Form ums freigeben!
AutopilotON - Fr 22.12.06 20:02
Du musst mit "nil" aber ein wenig aufpassen, denn wenn du eine Variable auf nil setzt, heißt das nicht zwangsmäßig, dass
sie auch gelöscht ist. Du kannst die Variable zwar neu belegen, aber das alte Objekt bleibt im Speicher.
Guck dich dazu am besten mal nach "Pointer" und "lineare Listen" um - da wird das immer ganz gut erklärt.
Also bei solchen Fällen am Besten immer FreeAndNil() benutzen, wenn das Objekt vollständig gelöscht werden soll.
delphistart - Fr 22.12.06 20:04
AutopilotON hat folgendes geschrieben: |
Du musst mit "nil" aber ein wenig aufpassen, denn wenn du eine Variable auf nil setzt, heißt das nicht zwangsmäßig, dass
sie auch gelöscht ist. Du kannst die Variable zwar neu belegen, aber das alte Objekt bleibt im Speicher.
Guck dich dazu am besten mal nach "Pointer" und "lineare Listen" um - da wird das immer ganz gut erklärt.
Also bei solchen Fällen am Besten immer FreeAndNil() benutzen, wenn das Objekt vollständig gelöscht werden soll. |
Danke für die Zahlreichen Tipps! Klappt jetzt alles! :D
delphistart - Fr 22.12.06 20:33
Leider ist noch ein Problem aufgetreten:
Ich erzeuge die Elemente in einer Scrolbox (Ich setze die ScrollBox als Parent).
Wenn ich die Elemente erzeugt haben, setze ich ein Variable (position) auf position+53.
Die Variable position nutze ich dann als angabe für die Topeigenschaft. Somit bekomme ich eine Benutzerdefinierte Liste in die Scrolbox.
Nun passiert folgendes: Wenn die Liste zu lang wird, muss man in der Scrollbox scrollen. Scrollt der Benutzer jetzt nach unten und gibt dann neue Daten ein und Übernimmt diese, so wird die Topeigenschaft von der aktuellen Scrollposition berechnet. Somit werden die Elemente an falscher Stelle angezeigt. Wie kann ich das korrigieren? Ich suche sowas wie Label1.Top:=position-scrollpsition... nur wie komme ich an die Scrollposition???
delphistart - Sa 23.12.06 11:35
Habe das Problem nach ewigem Rumprobieren eben selber gelöst:
Delphi-Quelltext
1:
| Button1.Top := 10 - ScrollBox1.VertScrollBar.Position; |
Trotzdem Danke... :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!