[EDIT] OK, Delphi 5 .... dann sind Generics nichts, obwohl es sie schon seit 12 Jahren gibt, außer vielleicht
https://www.embarcadero.com/de/products/delphi/starter [/EDIT]
Eine TCollection kann eh nur einen Typ (gleichzeitig) aufnehmen. (sie erstellt die Items intern, drum gibt man im Contructor den Typ rein)
Du kannst dir eine Collectionklasse bauen und je Instanz einen deiner ItemTypen reingeben.
Eine TCollection hat bereits ein Items, aber das ist vom Typ TCollectionItem und man müsste beim Zugriff casten.
Oder man überdeckt diess Items-Property mit einem Eigenen vom passenden Typ und macht den Cast intern.
(das kannst auch dir als generische Collection ableiten und den Typ für Create aus dem generischen Parameter nehmen, sowie als Typ für dein Items-Property)
Delphi-Quellcode:
type
TBasicCollection<T: class> = class(TCollection)
private
function GetItem(idx: Integer): T;
procedure SetItem(idx: Integer; Value: T);
public
constructor Create;
function Add: T;
property Items[idx: Integer]: T read GetItem write SetItem; default;
//function Insert(idx: Integer): T;
//function FindItemID(ID: Integer): T;
//function GetEnumerator: TCollectionEnumerator<T>; inline;
//procedure Sort(const AComparer: IComparer<T>);
end;
function TBasicCollection<T>.Add: T;
begin
Result := T(inherited Add);
end;
constructor TBasicCollection<T>.Create;
begin
Assert(T.InheritsFrom(TCollectionItem), 'bla bla');
inherited Create(TCollectionItemClass(T));
end;
function TBasicCollection<T>.GetItem(Idx: Integer): T;
begin
Result := T(inherited Items[Idx])
end;
procedure TBasicCollection<T>.SetItem(Idx: Integer; Value: T);
begin
inherited Items[Idx] := TCollectionItem(Value);
end;
Dem FormDesigner ist der Typ egal, da er die Properties via
RTTI aus den Items holt, um sie anzuzeigen.
Willst du aber wirklich eine TCollection?
Die ist eigentlich nur gut als Property, welches seine Items "automatisch" in der
DFM speichert und wieder liest und die auch einen Standard-ListenEdior für den ObjectIonspector bereitstellt. (ohne daß man selber einen Code dafür schreiben muß)
Ansonsten wäre wohl eine generische TObjectList<> eventuell handlicher zu nutzen.
Die generieschen Listen gibt es auch als Dictionary, Queue oder Stack ... jenachdem wie man zugreifen/suchen/befüllen möchte.
Oder als ThreadList, inkl. CriticalSection für einen sicheren Zugriff.