Home » Tutorials » VCL » TList

TList

TList allgemein

Zuerst will ich kurz die grundlegenen Funktionen von TList beschreiben. Danach werden wir unser Programm schreiben.
TList speichert, wie uns die Hilfe verrät, ein Array von Zeigern. Während diese Funktion früher noch von Hand programmiert werden musste, nimmt uns TList jetzt die Arbeit ab.

Ein TList-Objekt erstellt ihr wie folgt:

var UnsereListe: TList;
...
UnsereListe := TList.Create;

Wenn wir fertig sind, entfernen wir das Ganze wieder aus dem Speicher:

UnsereListe.Free;

Um einen Pointer an die Liste anzufügen oder zu löschen, geben wir folgenden Code ein:

UnsereListe.Add(Zeiger1); // Hinzufügen
UnsereListe.Delete(0); // löscht den Zeiger Nummer 0, der erste Index ist 0

{ bevor der Zeiger aus der List gelöscht wird, muss der von
ihm belegte Speicher wieder freigegeben werden, sonst haben
wir es mit einer Speicherleiche zu tun }

Die Zeiger können auch innerhalb der Liste bewegt werden:

UnsereListe.Move(0,3); // verschiebt Element 0 an Position 3

Um noch mal alles auf einmal vor uns zu haben, folgendes kleines Programm:

var UnsereListe: TList;
    Zahl:^Integer; // Ein Pointer auf eine Integer-Variable
    loop:Integer; // einfach nur ne Variable

begin

 UnsereListe:=TList.Create;
 New(Zahl); // Speicher für Zahl reservieren
 Zahl^:=5; // irgend einen Wert zuweisen
 UnsereListe.Add(Zahl); // Element 0

 New(Zahl); // Speicher für Zahl nochmals reservieren
 Zahl^:=10; // irgend einen Wert zuweisen
 UnsereListe.Add(Zahl); // Element 1

 { die Liste beinhaltet jetzt also zwei Zeiger auf Integervariablen
 mit folgendem Inhalt 5, 10 }

 UnsereListe.Move(0,1); // verschiebt Element 0 an Position 1

 {die Liste sieht jetzt also so aus: 10, 5 }

 for loop:=0 to UnsereListe.Count-1 do
  begin
   Zahl:=UnsereListe.Items[loop];
   Dispose(Zahl);
  end;
 { wir haben jetzt also den Speicher für jede Integer-Variable
 wieder freigegeben }

 while UnsereListe.Count>0 do
  UnsereListe.Delete(0);
 { alle Elemente werden wieder aus der Liste gelöscht }

 UnsereListe.Free; // raus aus dem Speicher

end;

Jetzt, wo wir wissen, wie TList prinzipiell funktioniert, kann es losgehen.