PDA

Ver la Versión Completa : Responder a enventos


craven
17-05-2003, 13:19:58
Hola amigos. Tengo una preguntilla que haceros, a ver si me podeis ayudar. En mi proyecto MDI tengo la ventana padre y una ventana hija que creo en tiempo de ejecución. En algun momento de la ejecución, la ventana hija puede realizar una determinada acción y lanza un evento tras ella... ¿Puede la ventana padre responder a dicho evento cuando se produzca? ¿Cómo? Gracias de antemano. Un saludo.

roman
17-05-2003, 17:33:50
Se me ocurre que lo puedes hacer agregando un evento a la forma Hija:


type
TFormaHija = class(TForm)
private
FOnMiEvento: TNotifyEvent;

public
property OnMiEvento: TNotifyEvent read FOnMiEvento write FOnMiEvento;
end;

Cuando la hija decida mandar el evento lo hará así:


if Assigned(FOnMiEvento) then
FOnMiEvento(Self);

La forma padre debe crear un método para recibir el evento:


type
TFormaPadre = class(TForm)
private
procedure FormaHijaMiEvento(Sender: TObject);
end;

Y asignárselo a la propiedad OnMiEvento de la forma hija:


FormaHija.OnMiEvento := FormaHijaMiEvento;

Debes tener cuidado con lo siguiente:

No puedes hacer esta asignación sino hasta después de que se cree la forma hija. Es decir, si tratas de hacer esta asignación en el evento OnCreate de la forma padre y la forma hija se crea automáticamente entonces te lanzará un error de violación de acceso.

Si utilizas varias instancias de la forma hija deberás asignar el procedimiento FormaHijaMiEvento a todas ellas.

// Saludos

craven
17-05-2003, 20:12:41
Hola Roman. Muchas gracias, funciona a la perfección. Un saludo.