Есть ли в Delphi 2010 способ перебора любого индексируемого свойства (например, Pages of TPageControl)?
Итерация по индексированному свойству в Delphi 2010
Ответы (2)
Нет, это невозможно, так как не существует стандартного шаблона, который:
- указывает тип индекса
- указывает начальное и конечное значения используемого индекса
Вот почему в некоторых классах есть перечислители: это шаблон, который сообщает оператору for ... in, как его перечислять.
Однако то, что вы можете сделать, является наилучшей оценкой:
- в большинстве случаев индекс является целым числом
- в большинстве случаев индекс начинается с нуля
- в большинстве случаев есть свойство Count или Length, которое говорит вам, как получить конечное значение
Наконец, можно "модернизировать " TPageControl с GetEnumertor, использующим помощники класса (или помощники записи, если базовым типом является запись).
Если я вас правильно понял, вы хотите перебирать эти свойства через RTTI, ничего не зная о свойстве и его значениях индекса. Поскольку действительные значения индекса не должны быть последовательностью целых значений, это невозможно. Могут быть свойства со строковыми индексами или со ссылками на объекты в качестве значения индекса. И в RTTI нет механизма для запроса действительных значений индекса, которые можно было бы использовать для итерации.
ActivePageIndex
не является индексируемым свойством. - person David Heffernan   schedule 31.10.2011