Autor Beitrag
delphistart
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Fr 22.12.06 18:45 
Ich mochte gerne ein Element, dass zur Laufzeit erzeugt wird wieder löschen. Wie kann ich das machen?

So wird das Element erzeugt:
ausblenden Delphi-Quelltext
1:
arrLabel1[count]:=TLabel.Create(self);					
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.12.06 19:00 
ausblenden Delphi-Quelltext
1:
arrLabel1[count].Free;					

_________________
Markus Kinzler.
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Fr 22.12.06 19:27 
user profile iconmkinzler hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
arrLabel1[count].Free;					


Noch eine Frage: Wo ist der Unterschied zwischen Free und FreeAndNil?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.12.06 19:30 
FreeAnNil() setzt die Instanzvariable anschließend auf Nil

_________________
Markus Kinzler.
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Fr 22.12.06 19:33 
user profile iconmkinzler hat folgendes geschrieben:
FreeAnNil() setzt die Instanzvariable anschließend auf Nil


Und was ist Nil? :?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 22.12.06 19:34 
Nil ist das Delphigegenstück zu NULL. Das bedeutet soviel wie nicht definiert.

_________________
Markus Kinzler.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 22.12.06 20:20 
Nil = Not In List ;)
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 22.12.06 20:53 
user profile iconmkinzler hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
arrLabel1[count].Free;					

Wenn Du
ausblenden Delphi-Quelltext
1:
arrLabel1[count].Parent := Form1;					

setzt, kümmert sich das Form ums freigeben!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
AutopilotON
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 98,ME,XP SP2,Suse 10.0
D6, TurboDelphi 2006
BeitragVerfasst: Fr 22.12.06 21: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Fr 22.12.06 21:04 
user profile iconAutopilotON 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Fr 22.12.06 21: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 23.12.06 12:35 
Habe das Problem nach ewigem Rumprobieren eben selber gelöst:

ausblenden Delphi-Quelltext
1:
Button1.Top := 10 - ScrollBox1.VertScrollBar.Position;					


Trotzdem Danke... :-)