creo entender que es esto lo que quieres:
Código:
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
a: array of string;
procedure ActualizaArray ( a : array of string;
const NuevoValor:string; const
Indice :integer = -1);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ActualizaArray ( a : array of string;
const NuevoValor:string;
const Indice :integer = -1);
var idx:integer;
begin
if indice = -1 then
idx := High(a)
else
idx := indice;
a[idx]:= NuevoValor
end;
así el ultimo parámetro es opcional, si no especificas el indice, modifica el ultimo, si pones uno, pues modifica ese indice.
Yo he usado un procedimiento en lugar de una función, la verdad, no sé que valor quieres devolver en la funcion.
function ActualizaArray ( a : array of string;
const NuevoValor:string;
const Indice :integer = -1): string;
Y dentro de la funcion Result := 'valor devuelto';
Si lo he entendido mal, pon tu función y lo vemos.
Otra cosa que no le gustará al foro es esta:
Si solo tienes un array dinamico, puedes omitir ese parámetro, y al ser global, puedes acceder a ella dentro de la función. Aunque desde luego no es una buena práctica

y menos si estas empezando en Delphi.
Saludos