I think you want to write it like this:
type
TMyGenericRecord<T1, T2> = record
X: T1;
Y: T2;
end;
TMyGenericList<T1, T2> = class(TList<TMyGenericRecord<T1, T2>>);
You can then instantiate the type like this, for example:
var
List: TMyGenericList<Integer, string>;
You can then declare a record that is compatible with this list like so:
var
Rec: TMyGenericRecord<Integer, string>;
At which point
List.Add(Rec);
will compile. Although clearly you'd need to construct an instance of the list.