А зря. Есть в FPC такой баг-перестраховка на Var-аргументах : 
-------------- 
proc ( var arg: array of integer; ..) 
begin 
.. 
setlength(arg, value) 
.. 
end; 
------------- 
будет ругаться, зато : 
---------------- 
type 
integerarty = array of integer; 
var 
.. 
proc ( var arg: integerarty; ..) 
begin 
.. 
setlength(arg, value) 
.. 
end; 
------------- 
работает на "ура"  
Я тоже не сразу понял, почему автор MSEgui всегда объявляет новый тип для открытых массивов.
Ничего удивительного. Ведь
- Код: Выделить всё
- proc ( var arg: array of integer; ..) 
и
- Код: Выделить всё
- type 
 integerarty = array of integer;
 proc ( var arg: integerarty; ..)
разные вещи.
Первое - Open Array Parameters. Может принимать в ккачестве параметров не только динамические массивы, но и обычные. Поэтому SetLength и не работает. Без модификатора var вообще передается через стек.
Второе же - ожидается передача именно дин. массива.
Не знаю как в FPC, а в Delphi этот "баг" прописан в документации и является фичей.
 По теме
По теме: самый быстрый способ удалить из массива элемент это заместить его последним эл-том массива (предварительно можно финализировать), а сам массив, сократить на единицу.
Порядок эл-тов при этом конечно не сохраняется, но это далеко не всегда реально нужно. А все эти Move'ы с дин. массивами чреваты. Все-таки дин. массивы это refcounted объекты и не стоит с ними так.