Delphi. Перечисляемые типы и множества

Перечисляемый тип

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]