Delphi 2009 — свойство типа Custom Enum в Инспекторе объектов
-
05-09-2019 - |
Вопрос
Я создал собственный тип TAction, который имеет два дополнительных свойства: строку типа и перечисление.
Строковое значение отображается в инспекторе объектов нормально, однако тип перечисления вообще не отображается.Как я могу получить пользовательский тип перечисления для отображения в виде раскрывающегося значения свойства в инспекторе объектов?
Решение
Свойства перечисления должны использовать класс TEnumProperty по умолчанию для редактирования свойств.
Похоже, информацию RTTI найти не удалось.Где определен тип перечисления?В том же файле, что и компонент?
И используете ли вы тип перечисления с настраиваемыми значениями, например:
TMyEnum = (aA = 1, aB = 3);
Объяснение:если вы определяете перечисление со значениями, вы создаете тип поддиапазона с предопределенными константами.Таким образом, вышеизложенное следует интерпретировать как:
type
TMyEnum = 1..3;
const
aA : TMyEnum = 1;
aB : TMyEnum = 3;
Это может привести к странным ситуациям, таким как:Succ(aA) — это не aB, а 2.Информация есть в справке (Языковое руководство) Простые типы [Перечислимые типы с явно заданным порядковым номером].
Это может быть источником проблемы.
Если ничего не помогает, вы можете создать свой собственный редактор свойств.Который может изменить свойство перечисления в инспекторе объектов.Обычно вы можете использовать значение TEnumProperty по умолчанию.Но если этого недостаточно, вы можете сделать свою собственную:
Шаг 1. Создайте редактор свойств.В вашем случае возможно будет достаточно TEnumProperty (модуля DesignEditors) с небольшими изменениями.
Шаг 2. Убедитесь, что методы GetValue и SetValue работают нормально.Им нужно перевести строку в свойство перечисления и обратно.
Шаг 3. Если вам нужно настоящее особенное редактирование, обязательно переопределите метод редактирования.
Шаг 4. Убедитесь, что атрибуты редактора действительны.
Шаг 5. Зарегистрируйте редактор свойств с помощью RegisterPropertyEditor.
Просто посмотрите руководство для разработчиков компонентов для получения дополнительной информации.