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. 2) Как преобразовать из перечисления в набор в Delphi?
Контекст, в котором я его использую, - это компонентный массив полей редактирования (TEdit) с нерегулярной нумерацией (edit1, edit5, edit7, edit3, ... ). Хотя можно изменить порядок всех полей редактирования, это устраняет причину использования перечисления как гибкого способа добавления поля редактирования в середине перечисления.