Проблема заключается в том, что функция TVariantTypeProperty.GetValue в DesignEditors читает тип из значения Variant, а затем пытается найти его в ограниченном списке, который, по-видимому, охватывает только совместимые с OLE варианты плюс конкретное исключение для строки UniCode. Код для TVariantTypeProperty.SetValue переводит «string» для ввода varString, который, как представляется, является прокси для старого стиля AnsiString, а не современной строки UniCode. GetValue переводит тип varUString для отображения типа как строки и оставляет varString как «неизвестный». Это похоже на ошибку в интерфейсе проектирования Delphi, поскольку на самом деле не должно быть никакого различия между методами GetValue и SetValue.
Я проверил это только на XE2, поэтому не знаю, какие другие версии могут / не могут быть затронуты, хотя вы можете разумно толковать, что по крайней мере все предыдущие версии, так как это повлияло на преобразование Unicode.