Pasar un parámetro entre objetos.

Hola, un saludo.
Bueno, esto es una duda de como se haría... Si se puede.
Digamos que tengo 2 objetos cada uno en una unidad distinta, el primero contiene una variable de instancia que hace referencia al segundo objeto.
Uses
unit2,...
TObjeto1 = class //escenario
private
Objeto2: TObjeto2; //persona
Imagina que el segundo objeto es una persona que esta sobre un escenario (que seria el primer objeto) y se está moviendo.
Entonces quería saber la forma de hacer que el 2º objeto avise al 1º de que ha dejado de moverse sin tener un timer constantemente comprobando si se mueve el 2º objeto o no.
Espero haber dejado claro el problema.
Mi idea sería algo como los mensajes de la API de windows, aunque no se si van por ahí los tiros.
Bueno, gracias por las molestias.
Respuesta
1
Lo que demandas es el uso de Callbacks o eventos en el objeto que, capturados inicialmente en un método con la misma estructura, permite hacer algo cuando ese evento es lanzado.
Ejemplo:
Unit 2
Tobjeto2 = class
Type
TonAndar = Procedure (persona:String) of Object;
Private
Nombre : String;
Procedure bailar;
Public
Property OnAndar : TonAndar; //(Hacer Ctrl+May+C aquí)
End;
...
//Cuando se produzca el movimiento, lanzamos el evento.
Procedure Tobjeto2.bailar;
Begin
...
//Si está asignado, lo lanzamos
if assigned(OnAndar) then
OnAndar(Nombre);
End;
Entonces en la unit1, desde donde lanzamos el objeto2, capturamos el evento...
Unit 1;
Tform1 = class(tform)
Private
Procedure EventoAndar(persona:String);
Public
Procedure Crear;
End;
Uses unit2;
Procedure EventoAndar(persona:String);
Begin
Showmessage(persona);
End;
Procedure Tform1.crear;
Var
Obj2 : Tobjeto2;
Begin
Obj2 := Tobjeto2.create(self);
//Capturamos el evento en el procedure con la misma estructura que el definido.
//También pueden ser funciones callback.
Obj2.OnAndar := EventoAndar;
End;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas