Thanks.
It is clear, it is write protected. However I think it is wrong. Probably it comes from a normal for loop where for obvious reasons (well not so obvious if one thinks of the C logic while-do like for loops) it is not allowed to change the loop variable.
When the for-in iterates through the array, it should not make it write protected as not the record itself is iterated, but - I guess - under the hood the elements of the array. So, there is nothing wrong with changing an element of the array. Even if it was not an array of records, but e.g. an array of integers, why would/should it not be possible to change the integer that is an element of an array.
Yes, probably there are many ways to do an advanced iterator, but honestly then I stick to the for i := Low() to High() do logic. That is almost as easy as my intended solution, albeit far less elegant.