Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ejecutar procedimientos por su nombre y con parametros (https://www.clubdelphi.com/foros/showthread.php?t=42933)

makina 26-04-2007 06:43:51

Ejecutar procedimientos por su nombre y con parametros
 
Hola a todos!!

Tengo un problema y espero me puedan ayudar.

Necesito poder ejecutar un metodo(procedimiento/funcion) por su nombre, y ademas pasarle valores, ya he buscado en el foro y me encontre con la solucion que propone Neftalí con el uso de RTTI, sin embargo ademas de poder llamar al procedimiento necesito pasarle parametros, algo asi:

Código Delphi [-]
type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject) ;
     procedure CallMeByName(Sender: TObject;Valor1:string) ;
   private
     procedure ExecMethod(OnObject: TObject; MethodName: string) ;
   end;
 
var
   Form1: TForm1;
 
type
   TExec = procedure of object;
 
procedure TForm1.ExecMethod(OnObject: TObject; MethodName: string) ;
var
   Routine: TMethod;
   Exec: TExec;
begin
   Routine.Data := Pointer(OnObject) ;
   Routine.Code := OnObject.MethodAddress(MethodName) ;
   if NOT Assigned(Routine.Code) then Exit;
   Exec := TExec(Routine) ;
   Exec;
end;
 
procedure TForm1.CallMeByName(Sender: TObject;Valor1:String) ;
begin
   ShowMessage(Valor1) ;
end;
 
procedure TForm1.Button1Click(Sender: TObject) ;
begin
   ExecMethod(Form1, 'CallMeByName', valor1) ;
end;






es decir que en el momento en que ejecute el metodo ExecMethod con el parametro 'CallMeByName' tambien pueda pasarle el parametro valor1.

Espero haber sido claro, y les agradesco su ayuda

------------------------------------------------
makina:

Saludos desde México

VictorPenyalver 25-08-2010 11:06:02

Prueba con esto
 
Cambia esta declaración

Código Delphi [-]
type
   TExec = procedure of object;

por esta

Ejemplo para un parametro de tipo integer:

Código Delphi [-]
type
   TExec = procedure(valor: integer) of object;

Soa Pelaez 29-09-2016 03:02:18

Implemente tu código y hago que ejecute el procedimiento mediante un mensaje, al darle ok lo ejecuta pero si sucede un error nuevamente aparece el mensaje y pide que le de Ok o cancelar, el procedimiento lo ejecuta tantas veces aparezca esta ventana de mensaje, como hago para que cuando no haya error solo lo ejecute una vez y no todas las veces que le dio Ok a la ventana de mensaje, igual gracias tu código me ha servido bastante.
Espero puedas ayudarme.

Ñuño Martínez 29-09-2016 18:06:55

No entiendo muy bine lo que explicas, pero sospecho que no tiene que ver con esto. ¿Podrías poner tu código?


La franja horaria es GMT +2. Ahora son las 02:38:28.

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