Delphi 2009 - Свойство пользовательского типа Enum в Инспекторе объектов - PullRequest
2 голосов
/ 08 апреля 2009

Я создал собственный тип TAction, который имеет 2 дополнительных свойства типа string и перечисления.

Строковое значение отображается в инспекторе объектов нормально, однако тип перечисления вообще не отображается. Как получить пользовательский тип перечисления для отображения в виде раскрывающегося значения свойства в инспекторе объектов?

1 Ответ

11 голосов
/ 08 апреля 2009

Свойства перечисления должны использовать класс TEnumProperty по умолчанию для редактирования свойств.

Похоже, что информация RTTI не может быть найдена. Где определяется тип enum? В том же файле, что и компонент?

И используете ли вы тип enum с пользовательскими значениями, такими как:

TMyEnum = (aA = 1, aB = 3);

Объяснение: если вы определяете перечисление со значениями, вы создаете тип поддиапазона с предопределенными константами. Таким образом, вышесказанное следует интерпретировать как:

type
  TMyEnum = 1..3;
const
  aA : TMyEnum = 1;
  aB : TMyEnum = 3;

Это может привести к странным ситуациям, таким как: Succ (aA) не aB, а 2. Информация в справке (Language Guide) Простые типы [Перечислимые типы с явно заданным порядком].

Это может быть источником проблемы.

Если ничего не помогает, вы можете создать свой собственный редактор свойств. Который может изменять свойство enum в инспекторе объектов. Обычно вы сможете использовать TEnumProperty по умолчанию. Но если этого недостаточно, вы можете бросить свой собственный:

Шаг 1, получить редактор свойств. В вашем случае возможно TEnumProperty (модуль DesignEditors) будет достаточно вероятно с небольшими изменениями.

Шаг 2, убедитесь, что методы GetValue и SetValue работают нормально. Им нужно перевести строку в свойство enum и обратно.

Шаг 3, если вам нужно настоящее специальное редактирование, обязательно переопределите метод редактирования.

Шаг 4, убедитесь, что атрибуты редактора действительны.

Шаг 5, зарегистрируйте редактор свойств с помощью RegisterPropertyEditor.

Просто посмотрите руководство по написанию компонентов для получения дополнительной информации.

...