La estructura For-in necesita de la declaración de una variable de control de tipo enumerados, subrangos, conjuntos, números enteros (excepto int64 y qword), que nos permitirá controlar el número de repeticiones que realizará la estructura de control en una estructura For-in.
Dependiendo de la variable de control, si la variable de control es de tipo enumerado el bucle se repetirá la cantidad de valores que tiene el tipo de dato enumerado, y la variable de control irá tomando dichos valores. Ejemplo:
La variable de control i, irá tomando los valores que tiene el tipo de dato enumerado Enum01, y luego los irá mostrando por pantalla. En el caso de conjuntos ocurre algo similar. Sólo que el bucle se ejecutará por cada elemento asignado a la variable de tipo conjunto, y la variable de control debe ser del tipo de dato del que se definió la variable de tipo conjunto. Ejemplo:
El bucle For-in también se puede usar con arreglos, en donde la variable de control debe ser del tipo de dato que se define para cada bloque de memoria del arreglo. Ejemplo:
Algo que se debe entender es que la variable de control, es una copia de todos los bloques o elementos que contenga un arreglo, es decir aunque el compilador compile el siguiente bucle:
for i in Registros do
Begin
Readln(i.Nombre);
Readln(i.Edad)
End;
no significa que hará cambios por cada elemento del arreglo, el bucle For-in siempre devolverá una copia de los valores de un arreglo, conjunto o un tipo de dato enumerado en la variable de control.