Как использовать два свойства для одного редактора свойств?
Обратитесь к этому моему предыдущему списку вопросов / ответов. Он описывает, как создать редактор свойств для IDE.
Я создал еще один редактор свойств для совершенно другой цели. В данном случае это селектор символа глифа типаString
(потому что он может содержать более одного символа глифа). В отличие от моего другого в упомянутом вопросе / ответе, он очень специфичен для конкретного свойства на конкретномTCollectionItem
мой класс.
Все хорошо, и я могу вызвать этот редактор свойств для этого конкретного свойства. Однако у меня есть дилемма. Редактор свойств по своей природе напрямую связан со шрифтом. Пользователь может выбрать символ (глиф) из определенного шрифта. В моем редакторе свойств есть возможность изменить шрифт и просмотреть глифы, содержащиеся в этом шрифте.
Этот компонент также имеет возможность указать шрифт в отдельном TFont
имущество. Проблема возникает, когда дело доходит до комбинации обоих Glyph
собственность и Font
свойство используется в том же редакторе свойств. Когда я вызываю этот редактор для Glyph
собственности, он также должен знать Font
который он должен использовать. Напротив, когда пользователь выбирает шрифт и символ глифа в этом редакторе, он также должен обновить обаGlyph
а такжеFont
свойства.
Короче, PropertyB
зависит от PropertyA
, Если PropertyA
изменения, тоPropertyB
будет иметь совершенно другой набор возможных значений. Итак, какой бы редактор я не установил в IDE, он должен позволять пользователюPropertyA
а также PropertyB
в то же время.
Как сделать так, чтобы редактор свойств имел доступ к нескольким свойствам?
2 ответа
Решение 1
Вместо редактора свойств реализуйте редактор компонентов. Такой редактор компонентов будет иметь доступ ко всему компоненту, а не только к одному свойству.
Решение 2
Оберните оба ваших свойства внутри выделенного TPersistent
класс, а затем создать TClassProperty
вместо этого редактор свойств для этого класса. Отдельные свойства фактически не вызывают редактор свойств. Вместо этого их родитель TPersistent
вызовет комбинированный редактор свойств, который имеет доступ ко всем свойствам в этом классе. Хороший существующий пример TFont
редактор.
TPropertyEditor
имеет общественность GetComponent()
метод, который можно использовать для доступа к объекту (объектам), свойство которого в данный момент редактируется (несколько объектов с одним и тем же свойством могут быть отредактированы одновременно, если это позволяет редактор свойств). Тогда у вас будет доступ ко всем другим свойствам в том же объекте (ах).
При этом, если ваш редактор отображает всплывающее диалоговое окно для редактирования, он должен быть реализован как редактор компонентов вместо (или в дополнение к) редактора свойств. Редактор свойств должен редактировать только одно свойство за раз, хотя он может зависеть от других свойств только для чтения. Например, Glyph
редактор свойств, который также редактирует Font
собственность, и наоборот, не очень хороший дизайн. Но компонентный редактор, который редактирует оба, вполне приемлем.