Delphi 2009 — свойство типа Custom Enum в Инспекторе объектов

StackOverflow https://stackoverflow.com/questions/729315

Вопрос

Я создал собственный тип 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top