Einzelnen Beitrag anzeigen

SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#13

Re: Objekt TList- ich versteh kein Wort!

  Alt 29. Okt 2008, 07:10
Hi ark,

mal was grundsätzliches zu Listen. Das ist eine Datenstruktur, mit der Du mehrere (viele) Objekte verwalten kannst. Dazu unterstützt die Liste im Prinzip diese wichtigen Funktionen:
  • Liste.Add(obj) - fügt das angegebene Objekt am Ende der Liste hinzu
  • Liste.Insert(idx, obj) - fügt das angegebene Objekt an der angegebenen Position ein und verschiebt alle nachfolgenden Objekte in der Liste um eine Position nach hinten
  • Liste.Delete(idx) - löscht das Objekt mit dem angegebenen Index aus der Liste und verschiebt alle nachfolgendenen Objekte um eine Position nach vorne
  • Liste.Remove(obj) - löscht das angegebene Objekt aus der Liste und verschiebt alle nachfolgendenen Objekte um eine Position nach vorne
  • Liste.Count - liefert dir die Anzahl der Objekte in der Liste
  • Liste.Items[idx] - liefert dir das Objekt mit dem angegebenen Index zurück

Hieraus kannst Du Dir dann deine eigentlichen Funktionen zusammenbasteln. Zum Beispiel würde ein Hinzufügen so aussehen:
Delphi-Quellcode:
var uhr: TBewegteUhr;
begin
  uhr := TBewegteUhr.Create(10, 10, 75);
  uhr.Kennt(Main); // <-- hier noch die weiteren Funktionen einfügen,
                   // die Du brauchst, um die Uhr zu initialisieren
  Liste.Add(uhr);
end;
Wenn Du alle Uhren bewegen willst, geht das im Prinzip so:
Delphi-Quellcode:
var i: Integer;
  uhr: TBewegteUhr;
begin
  for i:=0 to Liste.Count-1 do begin // ganz wichtig, immer von 0 bis count-1 zählen
    uhr := TBewegteUhr(Liste[i]); // Liste[i] ist das gleiche wie Liste.Items[i], aber wir sind halt faul...
    // hier mit der Uhr irgendwas machen
  end;
end;
Und das Löschen geht dann so:
Delphi-Quellcode:
var uhr: TBewegteUhr;
begin
  uhr := TBewegteUhr(Liste[idx]);
  Liste.Remove(uhr); // Liste.Delete(idx) wäre hier genau das gleiche
  FreeAndNil(uhr); // gibt den Speicher von uhr wieder frei
end;
Soweit verständlich?

Gruß,
SirTwist
  Mit Zitat antworten Zitat