Autor |
Beitrag |
delphistart
      
Beiträge: 119
|
Verfasst: 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:
Delphi-Quelltext 1:
| arrLabel1[count]:=TLabel.Create(self); |
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 22.12.06 19:00
Delphi-Quelltext 1:
| arrLabel1[count].Free; |
_________________ Markus Kinzler.
|
|
delphistart 
      
Beiträge: 119
|
Verfasst: Fr 22.12.06 19:27
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 22.12.06 19:30
FreeAnNil() setzt die Instanzvariable anschließend auf Nil
_________________ Markus Kinzler.
|
|
delphistart 
      
Beiträge: 119
|
Verfasst: Fr 22.12.06 19:33
mkinzler hat folgendes geschrieben: | FreeAnNil() setzt die Instanzvariable anschließend auf Nil |
Und was ist Nil? 
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 22.12.06 19:34
Nil ist das Delphigegenstück zu NULL. Das bedeutet soviel wie nicht definiert.
_________________ Markus Kinzler.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 22.12.06 20:20
Nil = Not In List 
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Fr 22.12.06 20:53
_________________ 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
      
Beiträge: 17
Win 98,ME,XP SP2,Suse 10.0
D6, TurboDelphi 2006
|
Verfasst: 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 
      
Beiträge: 119
|
Verfasst: Fr 22.12.06 21: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! 
|
|
delphistart 
      
Beiträge: 119
|
Verfasst: 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 
      
Beiträge: 119
|
Verfasst: Sa 23.12.06 12:35
Habe das Problem nach ewigem Rumprobieren eben selber gelöst:
Delphi-Quelltext 1:
| Button1.Top := 10 - ScrollBox1.VertScrollBar.Position; |
Trotzdem Danke... 
|
|