Необходимо взять адрес местоположения типа параметра универсального типа, затем типизировать этот адрес для указателя на желаемый тип, а затем разыменовать этот указатель и назначить его в результирующее местоположение. Например:
PObject(@Value)^ := Ptr;
Причина, по которой вы не можете просто ввести значение типа T, где T неограничен, заключается в том, что компилятор не знает размер T; обычно нечисловые типы могут преобразовывать значения только в типы одинакового размера.
К сожалению, компилятор не настолько умен, чтобы понять, что ограничение типа класса означает, что T гарантированно будет того же размера, что и указатель.
Кроме того, существует проблема с текущими обобщениями Delphi 2009 с созданием указателей для типов параметров типов. Общие указатели не поддерживаются компилятором, но компилятор разрешает этот синтаксис внутри классов:
type
C<T> = class
type
PT = ^T; // UNSUPPORTED!
end;
Это может работать для определенных сценариев - и может быть полезно для вашей конкретной проблемы - но это работает только случайно и обычно не поддерживается. Используйте на свой страх и риск.