Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ejecutar procedimiento sabiendo únicamente su nombre (https://www.clubdelphi.com/foros/showthread.php?t=72989)

DarkDudae 24-03-2011 10:51:07

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

marcoszorrilla 24-03-2011 11:09:15

Muchas gracias por el aporte.

Un Saludo.

gatosoft 24-03-2011 20:30:01

Amigo DarkDudae, este es un muy buen aporte y creo que clasifica para que lo apuntes en la sección de Trucos del Club.

http://www.clubdelphi.com/trucos/

Y de nuevo, muchas gracias por tu aporte, en el pasado me hubiera gustado mucho encontrarme con un hilo con esta solución....por ahora voy a incluirlo en mi biblioteca de utilidades...

Un saludo,

gatosoft 25-03-2011 03:06:39

Bueno, ahora buscando, ya "coso" habia posteado un truco similar...

http://www.clubdelphi.com/trucos/ind...=176&scrollb=0

DarkDudae 26-03-2011 13:19:26

Cita:

Empezado por gatosoft (Mensaje 394613)
Bueno, ahora buscando, ya "coso" habia posteado un truco similar...

http://www.clubdelphi.com/trucos/ind...=176&scrollb=0

Gracias por la info gatosoft.... ¡qué lastima no haber encontrado ese truco antes!


La franja horaria es GMT +2. Ahora son las 03:02:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi