Si, es normal. El array que tu tienes lo has creado para objetos tipo procedure a secas, en tu ultimo codigo estabas intentando meter procedures con argumento alla. Seria como meter un TBitmap en un array de TShapes, por ejemplo. Si lo que quieres es hacer un array con procedures que le mandas argumentos, o con funciones, deberas declararlo de otra manera
Código Delphi
[-]
procedures_sin_nada : array [0..10] of procedure of object;
procedures_con_arg : array [0..10] of procedure (s : string) of object;
procedures_con_arg_2 : array [0..10] of procedure (a : double; td : TEdit) of object;
funciones_con_arg : array [0..10] of function (s : string) : string of object
...
lo que se esta realmente guardando en el array es la direccion de memoria donde se encuentra cargada dicha funcion, su puntero o pointer.
Para tener varios tipos de funciones (con varios tipos y numero de argumentos) lo mejor es crear un solo tipo con una cadena de argumento y luego parsearlos. Ten en cuenta que es trabajoso, al menos hacerlo la primera vez , por lo que quiza no te acabe a salir a cuenta.
Te pongo un ejemplo
Código Delphi
[-]
procedure TForm1.Funcion1(s : string);
var
sl : TStringList;
arg_1 : integer;
arg_2 : double;
arg_3 : TEdit;
begin
sl := TstringList.Create;
sl.commatext := s;
arg_1 := strtofloat(sl[0]);
arg_2 := sl[1];
arg_3 := (FindComponent(sl[2]) as TEdit);
...
sl.free;
end;
PD: en tu codigo, estas usando un array dinamico, esto es, sin indicarle la cantidad de elementos que tiene. No se si se le tiene que asignar o no memoria en este caso, pues es, a lo sumo, un array de enteros. A ver si alguien del foro lo aclara :/
Venga, saludos.