Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-06

asignar un procedimiento

10 messages · 3 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

christian Ortiz

Hola a todos,

se que puedo asignar un procedimiento a un evento asi :

micomponent.Onclick= @MiProcedure

tengo un inconveniente ahora,

en mi clase defino un procedimiento sin codigo que se le psa el parametro sender del objeto,

Como puedo reasgnar otro un procedimiento de otra clase a ese procedimiento?

Christian ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20100614/bfa6f4a0/attachment.html>

Reply by email

José Mejuto
to christian Ortiz

Hello christian,

Tuesday, June 15, 2010, 4:59:41 AM, you wrote:

cO> Hola a todos,
cO> se que puedo asignar un procedimiento a un evento asi : cO> micomponent.Onclick= @MiProcedure
cO> tengo un inconveniente ahora,
cO> en mi clase defino un procedimiento sin codigo que se le psa el parametro cO> sender del objeto,
cO> Como puedo reasgnar otro un procedimiento de otra clase a ese procedimiento?

Puedes poner pseudoc�digo de lo que quieres hacer. Es que no acabo de entenderlo.

Best regards, Jos�

Reply by email

christian Ortiz
to José Mejuto

me explico mejor:

en mi clase tengo un procedimiento Onclick que ha sido asignado al evento click de los componentes creados, y este procedimiento al final llama a otro procedimiento, que por defecto esta sin codigo.

Desde otra clase llamo a la 1ra, creo mis objetos pero quiero asignar un procedimiento de la 2da clase al procedimiento de la 1ra que se encuentra sin codigo.

Alguna idea?

miclase.Miprocedimiento := @MinuevoProcedimiento   no funciona

El 15/06/10, Jos� Mejuto <joshyfun en gmail.com> escribi�:

Show quoted text 27 lines
Hello christian, Tuesday, June 15, 2010, 4:59:41 AM, you wrote: cO> Hola a todos, cO> se que puedo asignar un procedimiento a un evento asi : cO> micomponent.Onclick= @MiProcedure cO> tengo un inconveniente ahora, cO> en mi clase defino un procedimiento sin codigo que se le psa el parametro cO> sender del objeto, cO> Como puedo reasgnar otro un procedimiento de otra clase a ese procedimiento? Puedes poner pseudoc�digo de lo que quieres hacer. Es que no acabo de entenderlo. -- Best regards, Jos� _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Christian

Reply by email

Maxi
to christian Ortiz

El d�a 15 de junio de 2010 10:39, christian Ortiz <xortix en gmail.com> escribi�:

Show quoted text 52 lines
me explico mejor: en mi clase tengo un procedimiento Onclick que ha sido asignado al evento click de los componentes creados, y este procedimiento al final llama a otro procedimiento, que por defecto esta sin codigo. Desde otra clase llamo a la 1ra, creo mis objetos pero quiero asignar un procedimiento de la 2da clase al procedimiento de la 1ra que se encuentra sin codigo. Alguna idea? miclase.Miprocedimiento := @MinuevoProcedimiento � no funciona El 15/06/10, Jos� Mejuto <joshyfun en gmail.com> escribi�: > Hello christian, > > Tuesday, June 15, 2010, 4:59:41 AM, you wrote: > > cO> Hola a todos, > cO> se que puedo asignar un procedimiento a un evento asi : > cO> micomponent.Onclick= @MiProcedure > cO> tengo un inconveniente ahora, > cO> en mi clase defino un procedimiento sin codigo que se le psa el > parametro > cO> sender del objeto, > cO> Como puedo reasgnar otro un procedimiento de otra clase a ese > procedimiento? > > Puedes poner pseudoc�digo de lo que quieres hacer. Es que no acabo de > entenderlo. > > -- > Best regards, > �Jos� > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > -- Christian _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

el objeto A debe conocer el metodo del objeto B, el objeto a deberia recibir el objeto b para poder usar sus metodos, sino el procedimiento deberia ser publico, no dentro de las clases

miprocedimiento(sender:tobject);
Begin
....
end;
ObjetoA.Onclick:= miprocedimiento;
ObjetoB.Onclick:= miprocedimiento;
Twitter: @nenunocomar Maximiliano Duarte Linux User #495070 Ubuntu User #28504 El que pregunta aprende, y el que contesta aprende a responder.

Reply by email

christian Ortiz
to Maxi

El 15 de junio de 2010 10:18, Maxi <maximiliano.duarte en gmail.com> escribi�:

Show quoted text 57 lines
El d�a 15 de junio de 2010 10:39, christian Ortiz <xortix en gmail.com> escribi�: > me explico mejor: > > en mi clase tengo un procedimiento Onclick que ha sido asignado al > evento click de los componentes creados, y este procedimiento al final > llama a otro procedimiento, que por defecto esta sin codigo. > > Desde otra clase llamo a la 1ra, creo mis objetos pero quiero asignar > un procedimiento de la 2da clase al procedimiento de la 1ra que se > encuentra sin codigo. > > Alguna idea? > > miclase.Miprocedimiento := @MinuevoProcedimiento no funciona > > El 15/06/10, Jos� Mejuto <joshyfun en gmail.com> escribi�: >> Hello christian, >> >> Tuesday, June 15, 2010, 4:59:41 AM, you wrote: >> >> cO> Hola a todos, >> cO> se que puedo asignar un procedimiento a un evento asi : >> cO> micomponent.Onclick= @MiProcedure >> cO> tengo un inconveniente ahora, >> cO> en mi clase defino un procedimiento sin codigo que se le psa el >> parametro >> cO> sender del objeto, >> cO> Como puedo reasgnar otro un procedimiento de otra clase a ese >> procedimiento? >> >> Puedes poner pseudoc�digo de lo que quieres hacer. Es que no acabo de >> entenderlo. >> >> -- >> Best regards, >> Jos� >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lists.lazarus.freepascal.org >> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >> > > > -- > Christian > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > el objeto A debe conocer el metodo del objeto B,

lo conoce

Show quoted text 12 lines
el objeto a deberia recibir el objeto b para poder usar sus metodos, sino el procedimiento deberia ser publico, no dentro de las clases miprocedimiento(sender:tobject); Begin .... end; ObjetoA.Onclick:= miprocedimiento; ObjetoB.Onclick:= miprocedimiento;

Creo que soy duro para explicar el problema, vamos a tratar de hacero mejo ...

============================
*Unit *Myclase

...
*type *Tlaclase = class
*public *
*Procedure *Elprocedimiento(sender:tobject)
----
*end*

....

============================

*Unit *OtraClase
*uses *Myclase, ...
.....
*type *
----------
*public *

   *procedure *button.click(sender:tobject);
   *procedure *OtroProcedure(sender:tobject);

.......
*implementation*

   *procedure *Totraclase.button.click(sender:tobject);
var instancia: Tlaclase;
*begin*
    instancia:= Tlaclase.create (..)
    instancia.Elprocedimiento  * --> Esto me genera error  *
*end*
   *procedure *Totraclase.OtroProcedure(sender:tobject);
*begin*
  //codigo deseado
*end*;
=============================== > Twitter: @nenunocomar > Maximiliano Duarte > Linux User #495070 > Ubuntu User #28504 > > El que pregunta aprende, y el que contesta aprende a responder. > > _______________________________________________ > 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.freepascal.org/pipermail/lazarus-es/attachments/20100615/651eb2b0/attachment-0001.html>

Reply by email

José Mejuto
to christian Ortiz

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 * --> 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�

Reply by email

Maxi
to José Mejuto

2010/6/15 Jos� Mejuto <joshyfun en gmail.com>:

Show quoted text 38 lines
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 * --> 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

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.

Twitter: @nenunocomar Maximiliano Duarte Linux User #495070 Ubuntu User #28504 El que pregunta aprende, y el que contesta aprende a responder.

Reply by email

christian Ortiz
to Maxi

2010/6/15 Maxi <maximiliano.duarte en gmail.com>

Show quoted text 46 lines
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 * --> 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 .....

Show quoted text 65 lines
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

Show quoted text 6 lines
_______________________________________________ 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.freepascal.org/pipermail/lazarus-es/attachments/20100615/9993f0b2/attachment.html>

Reply by email

José Mejuto
to Maxi: 2010/6/15 Jos� Mejuto <joshyfun en gmail.com>: Si se puede cambiar solo que tenes que…

Hello Maxi,

Tuesday, June 15, 2010, 9:11:45 PM, you wrote:

M> Si se puede cambiar solo que tenes que respetar el los parametros que M> espera, y el error esta en @ eso es para punteros a funciones, cuando M> queres llamar aun metodo de una dll. No para lo que estas haciendo

Maxi, vuelve a leer el psudoc�digo de ejemplo que ha puesto el amigo Christian y ver�s que no tiene nada que ver con eso, aunque la idea que hay por detr�s es parecida. Tu "sistema" si no me equivoco s�lo funciona con metodos published a trav�s de RTTI, pero la verdad no estoy seguro ya que es una cosa que no quiero usar si puedo evitarlo :)

Best regards, Jos�

Reply by email

christian Ortiz
to José Mejuto

El 15 de junio de 2010 16:18, Jos� Mejuto <joshyfun en gmail.com> escribi�:

Show quoted text 15 lines
Hello Maxi, Tuesday, June 15, 2010, 9:11:45 PM, you wrote: M> Si se puede cambiar solo que tenes que respetar el los parametros que M> espera, y el error esta en @ eso es para punteros a funciones, cuando M> queres llamar aun metodo de una dll. No para lo que estas haciendo Maxi, vuelve a leer el psudoc�digo de ejemplo que ha puesto el amigo Christian y ver�s que no tiene nada que ver con eso, aunque la idea que hay por detr�s es parecida. Tu "sistema" si no me equivoco s�lo funciona con metodos published a trav�s de RTTI, pero la verdad no estoy seguro ya que es una cosa que no quiero usar si puedo evitarlo :)

lo solucione definiendo un procedimiento como variable :D, gracias .......

Show quoted text 11 lines
-- Best regards, Jos� _______________________________________________ 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.freepascal.org/pipermail/lazarus-es/attachments/20100615/5fb18a1f/attachment.html>

Reply by email