Hola Manuel.
Si no te entiendo mal es lógico, por que la segunda asignación del arreglo anula la primera. En tu ejemplo la cantidad de elementos no termina siendo 30 sino 20 ya que la última sentencia fija el tamaño del arreglo en esa cifra.
Tal vez con estos ejemplos pueda explicar mejor a que me refiero:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
v: array of Integer;
i: Integer;
begin
for i:= 0 to 4 do
begin
SetLength(v, Length(v)+1);
v[Length(v)-1]:= i;
end;
for i:= 500 to 509 do
begin
SetLength(v, Length(v)+1);
v[High(v)]:= i; end;
for i:= Low(v) to High(v) do
ListBox1.Items.Add(IntToStr(v[i]))
end;
Código Delphi
[-]
procedure TForm1.Button2Click(Sender: TObject);
var
v: array of Integer;
i: Integer;
begin
SetLength(v, 5);
for i:= 0 to 5 do v[i]:= i;
SetLength(v, Length(v)+10);
for i:= 0 to 9 do v[5+i]:= 500+i;
for i:= Low(v) to High(v) do
ListBox1.Items.Add(IntToStr(v[i]));
end;
Saludos
