Buenas a todos:
Recientemente me he visto en la necesidad de tener que ejecutar procedimientos sabiendo únicamente su nombre. Tras no pocos quebraderos de cabeza, he encontrado con la solución.
Pocas veces nos veremos en la necesidad de usar algo así, pero cuando trabajas con formularios configurables/editables por el usuario y con componentes que pueden adoptar diferentes funciones (según las circunstancias y la configuración que elija el usuario) puede ser bastante útil.
Así pues, paso a describiros cómo lo he conseguido por si ayuda a alguien:
Código:
type
TExec = procedure of object;
Así definimos un procedimiento de objeto.
Código:
procedure TForm1.EjecutarMetodo(EnObjeto: TObject; NombreMetodo: string) ;
var
Rutina: TMethod;
Exec: TExec;
begin
Rutina.Data := Pointer(EnObjeto) ;
Rutina.Code := EnObjeto.MethodAddress(NombreMetodo) ;
if NOT Assigned(Rutina.Code) then Exit;
Exec := TExec(Rutina) ;
Exec;
end;
Código:
procedure TForm1.ProcedimientoCualquiera(Sender: TObject) ;
begin
ShowMessage('Hola') ;
end;
procedure TForm1.Button1Click(Sender: TObject) ;
begin
EjecutarMetodo(self, 'ProcedimientoCualquiera') ;
end;
Un saludo a todos