Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   cerrar todos las ventanas hijas (https://www.clubdelphi.com/foros/showthread.php?t=77544)

mjjj 06-02-2012 17:03:40

cerrar todos las ventanas hijas
 
Estimados, tengo la siguiente situación.
Una aplicación MDI, en la ventana hija en el evento ONClose lo siguiente.

Código Delphi [-]
procedure Tnueva_ocform.FormClose(Sender: TObject; var Action: TCloseAction);
var res: integer;
begin
res :=  (application.MessageBox(('¿Deséa guardar la orden de compra actual?'),'Atención',MB_YESNOcancel));
case res of
2: action:= canone; // cancelar
7: Action := caFree; // NO
6: begin             // SI
   action:= cafree;
   showmessage('guardar');
   end;
end
end;

Ahora bien, necesito un procedimiento en el formulario principal para cerrar todos las ventanas hijas, y que me entregue (puede ser un una variable de tipo boolean), si es que se cerraron todas las ventanas, ya que si se fijan en el evento OnClose, está la opción de cancelar el cierre de la ventana.

El codigo del procedimiento para cerrar todas las ventas está así, pero necesito saber si se cerrar todas antes de continuar

Código Delphi [-]
var i: integer;
begin
For i:=MDIChildCount-1 downto 0 do
begin
MDIChildren[i].Close;
end;

// codigo en caso de cerrar todas las ventanas hijas

end;

Alguna idea?

Gracias

mjjj 06-02-2012 17:10:41

una alternativa es ejecutar el procedimiento OnClose desde el mainform, pero no se que parametros pasarle.

Código Delphi [-]
procedure Tmainform.Button1Click(Sender: TObject);
var i: integer;
begin
For i:=MDIChildCount-1 downto 0 do
begin
//MDIChildren[i].Close;
mdichildren[i].OnClose(nil, cafree);  // que parametro deberás ir acá??

end;
end;

Caminante 06-02-2012 17:58:37

Cita:

Empezado por mjjj (Mensaje 424340)
una alternativa es ejecutar el procedimiento OnClose desde el mainform, pero no se que parametros pasarle.

Código Delphi [-]
procedure Tmainform.Button1Click(Sender: TObject);
var i: integer;
begin
For i:=MDIChildCount-1 downto 0 do
begin
//MDIChildren[i].Close;
mdichildren[i].OnClose(nil, cafree);  // que parametro deberás ir acá??

end;
end;

No estas llamando al procedimiento Close sino al evento Onclose
El codigo deberia ser asi:

Código Delphi [-]
procedure Tmainform.Button1Click(Sender: TObject);
var i: integer;
begin
For i:=MDIChildCount-1 downto 0 do
     MDIChildren[i].Close;//Solo llamar a close si has programado algo en onclose se ejecutara solo
end;

mjjj 06-02-2012 18:32:26

así es como está, está programado el evento OnClose del formulario hijo. El problema es que nose si se cerraron todos los formulario hijos, ya que en la programación del evento OnClose tiene la opción de cancelar.

Es por esto que trato de ejecutar el evento OnClose desde el formulario principal pasandole ciertos parametros, pero nose como hacerlo.... se puede??

Código Delphi [-]
procedure Tmainform.Button1Click(Sender: TObject);
var i: integer;
begin
For i:=MDIChildCount-1 downto 0 do
begin
//MDIChildren[i].Close;               // con esto cierro todo, pero nose si en algún formulario hijo cancelé el evento close.
mdichildren[i].OnClose(nil, cafree);  // estot podrá funcionar? que parametro debería ir acá??
end;
end;

Saludos.

Caminante 06-02-2012 18:42:26

Y para q necesitas eso? Cuando una ventana hija cancela su cierre queda en Mdichildcount. Solo verifica si mdichildcount es 0


La franja horaria es GMT +2. Ahora son las 20:26:29.

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