Ver Mensaje Individual
  #9  
Antiguo 21-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
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; // siendo s, por ejemplo s := '3.2 test Edit1';
        
        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.

Última edición por coso fecha: 21-06-2008 a las 18:36:50.
Responder Con Cita