Когда вы определяете перечисление
TExtDllEnum = (ENUM1 = $0, ENUM2 = $1, ENUM3 = $2, ENUM4 = $4, ENUM5 = $8, ENUM6 = $10);
, вы фактически определяете тип перечисления, состоящий из 17 ($ 10 + 1) возможных значений.То есть задокументировано .
Существует много способов реализовать итерацию только для назначенных констант перечисления (см. Другие ответы), но, как вы делаете это, вы повторяете более 17 значенийи это нельзя изменить.
Вот еще один пример итерации, использующий тот факт, что все значения ENUMx, кроме ENUM1, имеют степени 2:
type
TExtDllEnum = (ENUM1 = $0, ENUM2 = $1, ENUM3 = $2,
ENUM4 = $4, ENUM5 = $8, ENUM6 = $10);
var
e: TExtDllEnum;
begin
e:= Low(TExtDllEnum);
repeat
[..]
if e = ENUM1 then e:= ENUM2
else if e = High(TExtDllEnum) then Break
else e:= e shl 1;
until False;
end;