[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