Ver Mensaje Individual
  #1  
Antiguo 24-03-2011
DarkDudae DarkDudae is offline
Miembro
 
Registrado: abr 2006
Posts: 94
Reputación: 19
DarkDudae Va por buen camino
Ejecutar procedimiento sabiendo únicamente su nombre

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
Responder Con Cita