Перечисляемый тип
Uses System.TypInfo;
Объявление типа:
type
TypeEnum = (Enum0, Enum1, Enum2 ,Enum3);
Объявление переменной:
var Enum: TypeEnum;
Объявление переменной напрямую без создания типа
var Enum: (Enum0, Enum1, Enum2 ,Enum3);
Присвоение значения:
Enum := Enum1;
Элементы в блоке имеют нумерацию от 0 до 65536.
Функции для работы с перечисляемым типом:
Ord(X) - возвращает порядковый номер элемента;
Pred(X) - возвращает предыдущий элемент;
Succ(X) - возвращает следующий элемент;
Low(X) - первый элемент;
High(X) - последний элемент.
Получить название элемента:
GetEnumName(TypeInfo(TypeEnum),1)) = 'Enum1';
Получить порядковый номер элемента
GetEnumValue(TypeInfo(TypeEnum),'Enum1') = 1;
Множества
Размер множества ограничен размером в 255 значений.
Объявление типа:
type
A = set of Char;
TEnums = set of TypeEnum;
const
CustomEnums = [Enum1, Enum3];
Объявление переменной:
var Enums: TEnums;
Присвоение значения:
Enums := [Enum1,Enum3];
Проверка наличия элемента во множестве
if Enum1 in Enums then //True
Сравнение множеств
if [Enum0,Enum2] = Enums then //False
if [Enum0,Enum2] <> Enums then //True
if [Enum0,Enum2] <= Enums then //False
if [Enum0,Enum2] >= Enums then //False
Оператор <= равен TRUE, если все элементы первого множества принадлежат и второму множеству, а оператор >= равен TRUE, если все элементы второго множества принадлежат и первому множеству.
Добавление элемента во множество
Enums := Enums + [Enum2]; //[Enum1,Enum2,Enum3]
Include(Enums, Enum2);
Удаление элемента из множества
Enums := Enums - [Enum1]; //[Enum3]
Exclude(Enums, Enum1);
Пересечение множеств
Enums := Enums * [Enum0,Enum1]; //[Enum1]