1) Кто-нибудь знает, можно ли перебрать нерегулярное перечисление в Delphi (XE)?
Цикл по обычному перечислению - это нормально. Из Основы Delphi:
var
suit : (Hearts, Clubs, Diamonds, Spades);
begin
// Loop 3 times
For suit := Hearts to Diamonds do
ShowMessage('Suit = '+IntToStr(Ord(suit)));
end;
Но если 'костюм' вместо этого объявлен как
var
suit : (Hearts=1, Clubs, Diamonds=10, Spades);
петли 10 раз. Не удивительно, но я хотел бы зациклить 3. Единственное решение, которое я нашел до сих пор, - это преобразование перечисления в набор и использование цикла for ... in, как в delphi.about.com.
Итак, если ответ на вопрос 1) отрицательный, то:
2) Как преобразовать из перечисления в набор в Delphi?
Контекст, в котором я его использую, представляет собой компонентный массив полей редактирования (TEdit) с нерегулярной нумерацией (edit1, edit5, edit7, edit3, ...). Хотя можно переупорядочить все поля редактирования, это устраняет причину использования перечисления как гибкого способа добавления поля редактирования в середине перечисления.
TListпотомка и перебирать его? - person Ignacio Vazquez-Abrams   schedule 09.11.2010TypInfoс треском проваливается. Очевидно, вы не можете получитьTypeInfo()при нерегулярном перечислении, я тоже пробовал с набором, и это дало мне нарушения доступа. - person Jens Mühlenhoff   schedule 09.11.2010