Kann es sein, dass du etwas in dieser Richtung suchst?
Delphi-Quellcode:
interface
uses
SysUtils,Contnrs;
type
TMyObjectList = class;
TMyObject = class(TObject)
private
FList: TMyObjectList;
public
constructor Create;
destructor Destroy; override;
property Items: TMyObjectList read FList;
end;
TMyObjectList = class(TObject)
private
FList: TObjectList;
function GetItem(Index: Integer): TMyObject;
public
constructor Create;
destructor Destroy; override;
function Add(aItem: TMyObject): integer;
procedure Delete(aIndex: Integer);
procedure Clear;
function Count: integer;
function IndexOf(aItem: TMyObject): integer;
property Items[Index: Integer]:TMyObject read GetItem; default;
end;
implementation
{ TMyObjectList }
function TMyObjectList.Add(aItem: TMyObject): integer;
begin
Result := FList.Add(aItem);
end;
procedure TMyObjectList.Clear;
begin
while Count > 0 do
Delete(0);
end;
function TMyObjectList.Count: integer;
begin
Result:= FList.Count;
end;
constructor TMyObjectList.Create;
begin
inherited Create;
FList := TObjectList.Create(false);
end;
procedure TMyObjectList.Delete(aIndex: Integer);
var o: TMyObject;
begin
o := FList[aIndex] as TMyObject;
FList.Delete(aIndex);
o.Free;
end;
destructor TMyObjectList.Destroy;
begin
Clear;
FreeAndNil(FList);
inherited Destroy;
end;
function TMyObjectList.GetItem(Index: Integer): TMyObject;
begin
Result := FList[Index] as TMyObject;
end;
function TMyObjectList.IndexOf(aItem: TMyObject): integer;
begin
for Result := 0 to Count -1 do begin
if aItem = Items[Result] then
Exit;
end;
Result := -1;
end;
{ TMyObject }
constructor TMyObject.Create;
begin
inherited Create;
FList := TMyObjectList.Create;
end;
destructor TMyObject.Destroy;
begin
FreeAndNil(FList);
inherited Destroy;
end;
Aber kein Gewähr, ist nur runtergeschrieben...
Du kannst dir eine Liste erzeugen und ihr Objekte hinzufügen. Jedes Objekt hat selbst wiederrum eine Liste, der du wieder Objekte hinzufügen kannst. usw usw.