Delphi Enumerações com escopo (Scoped Enumerations)

A diretiva $SCOPEDENUMS habilita ou desabilita o uso de enumerações com escopo no código Delphi. Mais especificamente, $SCOPEDENUMS afeta apenas as definições de novas enumerações e controla apenas a adição dos símbolos de valor da enumeração ao escopo global.

No estado {$SCOPEDENUMS ON}, as enumerações têm escopo definido,
e os valores enum não são adicionados ao escopo global. Para especificar um membro de uma enumeração com escopo definido, você deve incluir o tipo da enumeração.

Você pode usar enumerações com escopo definido no código Delphi se ativar a diretiva do compilador {$SCOPEDENUMS ON}.

A diretiva do compilador {$SCOPEDENUMS ON ou OFF} ativa ou desativa o uso de enumerações com escopo no código Delphi, o padrão é desativada.

{$SCOPEDENUMS ON} define que as enumerações têm escopo definido e afeta declarações de tipos de enumeração até a diretiva {$SCOPEDENUMS OFF} mais próxima.

Os identificadores da enumeração introduzidos nos tipos de enumeração declarados após a diretiva {$SCOPEDENUMS ON} não são adicionados ao escopo global. Para usar um identificador de enumeração com escopo definido,
você deve qualificá-lo com o nome do tipo de enumeração que introduz esse identificador.

Exemplo:

Observe que isso também é válido:

Mesmo que TFoo não tenha sido declarado com $SCOPEDENUMS ON, o valor A ainda pode ser resolvido explicitamente usando o nome da enumeração.

Fontes:

https://docwiki.embarcadero.com/RADStudio/en/Scoped_Enums_(Delphi)

https://docwiki.embarcadero.com/RADStudio/en/Simple_Types_(Delphi)