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, ...). Хотя можно изменить порядок всех полей редактирования, это устраняет причину использования перечисления в качестве гибкого способа, позволяющего добавить поле редактирования в середине перечисления.