[Lazarus-es] asignar un procedimiento
christian Ortiz
xortix en gmail.com
Mar Jun 15 22:39:02 CEST 2010
2010/6/15 Maxi <maximiliano.duarte en gmail.com>
> 2010/6/15 José Mejuto <joshyfun en gmail.com>:
> > Hello christian,
> >
> > Tuesday, June 15, 2010, 7:05:39 PM, you wrote:
> >
> > cO> *type *Tlaclase = class
> > cO> *public *
> > cO> *Procedure *Elprocedimiento(sender:tobject)
> > cO> ----
> > cO> *end*
> > cO> ----------
> > cO> *public *
> > cO> *procedure *button.click(sender:tobject);
> > cO> *procedure *OtroProcedure(sender:tobject);
> > cO> .......
> > cO> *implementation*
> > cO> *procedure *Totraclase.button.click(sender:tobject);
> > cO> var instancia: Tlaclase;
> > cO> *begin*
> > cO> instancia:= Tlaclase.create (..)
> > cO> instancia.Elprocedimiento :=@OtroProcedure * --> Esto me genera
> error *
> > cO> *end*
> > cO> *procedure *Totraclase.OtroProcedure(sender:tobject);
> >
> > ElOtroprocedimiento no es un evento, es un procedimiento, que no se
> > puede cambiar. Para eso "ElOtroprocedimiento" tendría que ser un
> > evento, al estilo de "OnElOtroProcedimiento", vamos una property o
> > variable.
> >
> > --
> > Best regards,
> > José
> >
> >
> > _______________________________________________
> > Lazarus-es mailing list
> > Lazarus-es en lists.lazarus.freepascal.org
> > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
> >
>
>
> Si se puede cambiar solo que tenes que respetar el los parametros que
> espera, y el error esta en @ eso es para punteros a funciones, cuando
> queres llamar aun metodo de una dll. No para lo que estas haciendo
>
ok, pero .....
>
>
> Te paso un estracto para cargar procedimientos dinamicos buscandolos por
> nombre
>
> TForm1 = class(TForm)
> private
> { Private declarations }
> public
> { Public declarations }
> published
> Procedure LoadFormConsultaPadron;
> end;
>
> implementation
>
> uses
> windows, Constantes,inifiles;
>
> {$R *.dfm}
> Type
> TExecute0 = procedure of object;
> TExecute1 = procedure (aPerms:Integer)of object;
> TExecute2 = procedure (aParams:string;aPerms:Integer)of object;
>
> Implementation
>
>
> //******************************************************************************
> //***************************** Metodos dinamicos
> *****************************
>
> //******************************************************************************
> Procedure
> TForm1.ExecByName(aFormName:string);//,aParams:string;aPermisos:Integer);
> var
> Routine: TMethod;
> begin
> // Acceder al procedimiento
> Routine.Code := MethodAddress(aFormName);
> try
> if Assigned(Routine.Code) then // Encontrado?
> //para delphi {$WARNINGS OFF}
> TExecute0(Routine)//(aParams,aPermisos);
> //para delphi {$WARNINGS ON}
> else
> Application.MessageBox(pchar(format('No se encuentra la función
> "%s".',[aFormName])),'Información',MB_OK+MB_ICONHAND);
> except
> raise Exception.CreateFmt('Error al cargar la función
> "%s".',[aFormName]);
> end;
> END;
>
>
> Procedure TIWUserSession.LoadFormConsultaPadron;
> begin
> TFormConsultaPadron.Create(application).Show;
> end;
>
>
> Dependiendo de tu necesidad podes usar un metodo con mas de un parametro.
>
>
> aun no me queda muy claro la idea, tienes algun sitio donde pueda
estudiarlo? es que aun no entiendo como puedo asignarle l procedimiento
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
--
Christian
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20100615/9993f0b2/attachment-0002.html>
More information about the Lazarus-es
mailing list