Moin XXcD.
Bin auch noch nicht fit in diesem Thema, habe aber vor kurzem hier im Forum ein tolles Beispiel für die Verwendung von TList bekommen. Ich will mich selbst mal prüfen, ob ich das einigermaßen verstanden habe und erkläre es an einigen beispielhaften Codefragmenten mit meinen eigenen Worten:
1. Deklaration des Datenobjekts (="Record")
Delphi-Quellcode:
type TMyListItem = class
MyInteger : Integer;
MyString : String;
end;
2. Deklaration der eigentlichen Liste in deiner Klasse:
Delphi-Quellcode:
// ..
type TMyClass = class(~~)
//..
private
FMyList : TList;
//..
end;
3. Instanz der Liste bilden (z.B. im Create der Klasse)
Delphi-Quellcode:
constructor TMyClass.Create(AOwner:TComponent);
begin
inherited;
//..
FMyList:=TList.Create;
//..
end;
4. Liste mit Werten füllen
Delphi-Quellcode:
procedure TMyClass.Add2List;
var ListItem : TMyListItem;
begin
ListItem:=TMyListItem.Create; // "Record" erzeugen
ListItem.MyInteger:=22; // "Record" füllen
ListItem.MyString:='ein String';
FMyList.Add(ListItem); // Adresse des "Records" an Liste übergeben
end;
5. Zugriff auf einen "Record" der Liste
Delphi-Quellcode:
function TMyClass.GetListItem(Index:Integer):TMyListItem;
begin
Result:=FMyList[Index]
end;
6. Löschen eines "Records"
Delphi-Quellcode:
procedure TMyClass.DeleteItem(Index:Integer);
begin
TObject(FMyList[Index]).Free; // "Record" freigeben
FMyList.Delete(Index); // Listenelement löschen
FMyList.Capacity:=FMyList.Count; // Listengröße anpassen
end;
7. Gesamte Liste löschen
Delphi-Quellcode:
procedure TMyClass.DeleteList;
var i : Integer;
begin
for i:=1 to FMyList.Count do
TObject(FMyList[i-1].Free; // ALLE "Records" freigeben
FMyList.Clear; // Liste löschen
end;
PS : Mit
VCL oder
nonVCL sollte das eigentlich nix zu tun haben