Статьи Королевства Дельфи


Метаданные - часть 2


TGsvObjectInspectorPropertyInfo = record Name: String; Caption: String; Kind: TGsvObjectInspectorPropertyKind; Tag: LongInt; NestedType: String; NestedClass: TGsvObjectInspectorTypeInfoClass; Help: Integer; Hint: String; end; PGsvObjectInspectorTypeInfo = ^TGsvObjectInspectorTypeInfo;

  • Поле Name содержит имя published-свойства в инспектируемом объекте или в его заместителе. Доступ к свойствам основан на RTTI и требует, чтобы инспектируемые объекты (или их заместители) компилировались с созданием RTTI,
  • Поле Caption содержит имя свойства, под которым оно будет отображаться в инспекторе,
  • Kind. Это поле декларирует особенности отображения значения свойства в инспекторе, например, значение может быть текстом, списком, множеством, сложным объектом, который редактируется специальным редактором и так далее,
  • Tag используется для задания специфических данных свойства. В текущей версии инспектора он использует только для описания свойств-множеств,
  • NestedType и NestedClass. Два этих поля предоставляют альтернативные возможности указания типа вложенного свойства. Здесь целесообразно отметить, что вложенные свойства рассматриваются и описываются как самостоятельные - это позволяет описать их один раз и использовать в других классах метаданных. Забегая вперед, скажу что NestedType используется в том случае, если класс метаданных регистрируется в реестре метаданных, а NestedClass - если вложенный объект описывается в известном программном модуле и доступен при компиляции. Вложенное свойство трактуется весьма широко и, в общем случае, служит для ссылки на другой класс метаданных, который может быть действительно сложным объектом, или предоставлять метаданные об одном-единственном простом свойстве. Важным здесь является то, что классы метаданных могут ссылаться на другие метаклассы и создавать внутреннюю иерархическую структуру свойств инспектируемого объекта,
  • Поля Help и Hint в особых комментариях не нуждаются.
Поле Kind может принимать (в данной версии инспектора) следующие значения:
  • pkText - значение свойства отображается как текст, доступный для редактирования,
  • pkDropDownList - значение свойства доступно для выбора из списка возможных значений,
  • pkDialog - значения свойства редактируются специализированным диалогом-мастером,
  • pkFolder - фиктивное свойство, не имеющее значения, но позволяющее выстроить иерархический список дочерних подсвойств,
  • pkReadOnlyText - аналогично pkText, но доступно только для чтения,
  • pkImmediateText - аналогично pkText, но изменение значения свойства фиксируются немедленно при любом изменении текста,
  • pkBoolean - свойство отображается как CheckBox,
  • pkTextList - подобно pkDropDownList, но значение свойства можно редактировать, то есть, диапазон значений не ограничен списком,
  • pkSet - свойство-множество, отображается как родительское для вложенного списка элементов множества, каждый из которых представляется как логическое значение,
  • pkColor - свойство для выбора цвета из заданного списка,
  • pkColorRGB - подобно предыдущему, но цвет задается и редактируется в виде R.G.B и имеется возможность выбора цвета с помощью стандартного Windows-диалога.
Для иллюстрации всего сказанного приведем конкретный пример. Для простоты предположим, что мы будем инспектировать объекты всем известного типа TLabel. Причем, будем считать, что пользователю доступны для инспекции только свойства Caption, Font, Color, а также координаты и размеры. Класс метаданных для TLabel будет, в данном случае, таким:




Начало  Назад  Вперед



Книжный магазин