type TValue = Record Actual: String; Value: Array of ^TValue end; TArray = Record Name: String; Value: Array of ^TValue end; var MyArray: TArray; procedure DeclareArray(Name: String; Depth, Elements: Integer); begin MyArray.Name := Name; setlength(MyArray, Elements); setlength(MyArray.Value, Depth) end;