Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynamisch erzeuge Labels über Pointer in TList löschen. (https://www.delphipraxis.net/92630-dynamisch-erzeuge-labels-ueber-pointer-tlist-loeschen.html)

Cmon 23. Mai 2007 15:15


Dynamisch erzeuge Labels über Pointer in TList löschen.
 
Hallo,

ich programmiere momentan für den Infomatikunterricht an einem Bruchrechentrainerprogramm.
Ich benutze Delphi 3.0 und bin eigentlich schon so gut wie fertig, aber gerade komme ich nich.

Ich habe es bis jetzt folgendermaßen:
Delphi-Quellcode:
var gList:TList;


procedure TForm1.FormActivate...();
begin;
   gList := TList.Create();
end;
später wenn das Label erzeugt wird
Delphi-Quellcode:
   { Label dynamisch erzeugen }
   var neuesLabel:TLabel;
   neuesLabel := TLabel.Create(self);

   [...]
   
   { Label der Liste hinzufügen }
   gList.Add (@neuesLabel);

Später möchte ich die Labels der Liste wieder löschen:
Delphi-Quellcode:
   gList.items[0].free() // das funktioniert allerdings nicht

   ShowMessage(gList.items[0].Name); // auch das funktioniert nicht !

Ich bin leider, was Pointer angeht nicht alzu bewandelt und würde mich freuen,
wenn ihr mir Tipps geben könntet wo mein Fehler liegt.


Viele Grüße
Simon

DGL-luke 23. Mai 2007 15:18

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
1. Nimm anstatt der TList eine TObjectList

2. Caste richtig:

Delphi-Quellcode:
TLalbel(gList.items[0]).free();

ShowMessage(TLabel(gList.items[0]).Name);

Cmon 23. Mai 2007 15:23

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
Hey,

TObjectList funktioniert leider nicht:
Delphi-Quellcode:
Undefinierter Bezeichner: 'TObjectList'.

Muetze1 23. Mai 2007 15:25

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
TObjectList gibt es erst ab Delphi 4. Nutze den 2. Tipp und setz den Typecast richtig.

Cmon 23. Mai 2007 15:30

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
Ich hab es jetzt folgendermaßen probiert:
Delphi-Quellcode:
gList.Add(@neuesZaehlerLabel);

[...]

ShowMessage(TLabel(gTemporaereKomponenten.Items[0]).Name);
Jetzt bekomme ich aber immer eine Exception der Klasse EAccessViolation..

DGL-luke 23. Mai 2007 15:47

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
Dann lass das @ weg beim hinzufügen, evtl. auf Pointer casten.

SirThornberry 23. Mai 2007 16:07

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
es liegt definitiv an dem @ beim hinzufügen. Eine Objectinstanz ist bereits ein Pointer. Und mit dem @ holst du dir einen Pointer auf den Pointer.

Cmon 23. Mai 2007 16:33

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
Hallo,

ich hab das nun geändert, jedoch erhalte ich bei:
Delphi-Quellcode:
      ShowMessage(TLabel(gList.Items[0]).Name);
Eine Messagebox mit leerem Inhalt

http://home.arcor.de/ewe57/ShowMessage.jpg

Viele Grüße
Simon

SirThornberry 23. Mai 2007 16:37

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
verständlich! Schließlich weißt du deinem Label nie einen Namen zu. Somit hat es keinen Namen (der Name der Variablen ist nunmal nicht gleich dem Namen der Komponente)

Cmon 23. Mai 2007 17:41

Re: Dynamisch erzeuge Labels über Pointer in TList löschen.
 
:wall: oh man, klar vielen Dank.

Jedoch eins versteh ich noch nicht. Bei machen Labels erhalte ich eine Exception der Klasse EAccessViolation.
Bei anderen jedoch nicht, woran liegt das ?

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz