Además de lo que dice
Lepe lo cierto es que tu forma de asignar la longitud del arreglo es incorrecta; no me había percatado anteriormente.
En arreglos abiertos (como el que pasas como parámetro al procedimiento Ventanas) los índices siempre están basados en 0 de manera que High será la longitud del arreglo - 1.
Tal como tienes el ejemplo que pones, al haber sólo un elemento High es igual a 0 lo que provoca la violación de acceso ya que el arreglo dinámico tendrá longitud 0.
Puedes arreglar todo esto muy fácilmente cambiando High por Length pero haciendo la verificación que te indica
Lepe:
Código Delphi
[-]
if Length(Formularios) > 0 then
begin
SetLength(Forma, Length(Formularios));
for i := Low(Formularios) to High(Formularios) do
Forma[i] := Formularios[i];
end;
// Saludos