Ich habe zwar den Zusammenhang überhaupt nicht verstanden, aber wenn es darum geht, zu ermitteln, was konkret in Deinem HitObject-Feld steht, könntest Du doch statt der Records gleich Klassen verwenden. Zur Laufzeit ermittelst Du dann mit
is, welche konkrete Klasse das ist.
Delphi-Quellcode:
type
TMyObject = class
private
FOffset: integer;
public
property Offset: integer read FOffset write FOffset;
end;
TSpinner = class(TMyObject)
private
FLength : Integer;
public
property Length: integer read FLength write FLength;
end;
Das Feld in THitobject ist dann vom Typ TMyObject statt Pointer.
Delphi-Quellcode:
if HitObject.HitObject is TSpinner then
TSpinner(HitObject.HitObject).Length := 42;
Noch eleganter wären zwar Interfaces, ich weiß aber nicht, ob Du damit klarkommst.