Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Eventos para componentes creados en runtime (https://www.clubdelphi.com/foros/showthread.php?t=67008)

Caljim 23-03-2010 22:01:20

Eventos para componentes creados en runtime
 
A ver si me explico.

Estoy haciendo un formulario, que crea botones en tiempo de ejecucion. El problema es que necesito definir el codigo que se ejecute cuando haga click, pero no se como definirlo. Supongo que sera definir alguna propiedad del boton creado y direccionarlo a un procedimiento previamente hecho, pero no se.
El boton lo creo asi ...
MyButton := TSpeedButton.create(self);
MyButton.parent := Panel;
...

Lo que necesito supongo que será algo así:
MyButton.onclick := (procediento definido)

¿Alguien me echa un cable?

Gracias de antemano

maeyanes 23-03-2010 22:16:25

Hola...

Tienes que crear un método en la clase que tenga la siguiente firma:

Código Delphi [-]
TMyClass = class(TObject)
private
  procedure MyOnClickEvent(Sender: TObject);
  //...
end;

// Ahora lo asignamos...

MyButton.OnClikc := MyOnClickEvent;


Saludos...

Caljim 25-03-2010 18:10:41

En primer lugar muchas gracias por la respuesta.

Voy a explicarme mejor

He hecho un Form con lo siguiente ...
private
Button: TSpeedButton;

Luego en onActivate por ejemplo
For a := 0 to Lista.count - 1 do
begin
Button := TSpeedButton.create(Self);
Button.parent := panel;
Button.name := 'Bu' + Lista;
Button.onClick := MyOnclick(Button);

end;

In dispues el proc...

procedure TMyForm.MyOnClick(Sender: TObject);
begin
ShowMessage(Sender.name);

End;

Al ejecutar esto me da el error
Incompatible types TNotifyEvent and procedure

Que opinais???

delphi.com.ar 25-03-2010 18:13:18

Cita:

Empezado por Caljim (Mensaje 358276)
Button.onClick := MyOnclick(Button);

Al asignarlo de esa forma, con parámetros, el compilador debe entender que se trata de la llamada a un procedimiento y no una referencia al mismo.
Esta es la forma:
Código Delphi [-]
Button.onClick := MyOnclick;

Saludos!

Delphius 25-03-2010 18:27:19

Delphi.com.ar,
Creo que te equivocaste al copiar y pegar. No veo cual es la diferencia entre tu cita y el código que propones;)

Saludos,

delphi.com.ar 25-03-2010 19:51:39

Cita:

Empezado por Delphius (Mensaje 358287)
Delphi.com.ar,
Creo que te equivocaste al copiar y pegar. No veo cual es la diferencia entre tu cita y el código que propones;)

Corregido!... gracias!

Caljim 25-03-2010 20:31:45

Muchisimas gracias,

Pensaba que de esta manera el compilador me devolveria que faltaban parametros, pero ahora lo entiendo, no llamo al procedimiento, sino que dirijo la llamada del evento a ese procedimiento.

Gracias de nuevo

Delphius 26-03-2010 01:24:46

Cita:

Empezado por delphi.com.ar (Mensaje 358313)
Corregido!... gracias!

De nada Federico,
No tienes que agradecer, justo pasaba por aquí y vi el pequeño error y consideré que era mejor darlo a conocer antes de que empezaran los hilos con mensajes "pero es lo mismo" "que no funciona" ,etc.

Saludos,


La franja horaria es GMT +2. Ahora son las 18:19:23.

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