Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup es.comp.lenguajes.* Foro > Newsgroup es.comp.lenguajes.delphi
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 11-08-2004, 11:20:19
schumacker
 
Mensajes: n/a
Predeterminado Problema al cerrar aplicaciones MDI

Hola a todos!
Trabajo con Delphi 7 en Windows 2000

Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
disparen. Es por eso que en el evento OnClose del MainForm pongo el
siguiente codigo:

for i := 0 to MDIChildCount - 1 do
MDIChildren[i].Close

De este modo, todos los eventos OnClose de los hijos se llamaran. En
el codigo OnClose de los hijos tengo el siguiente codigo:

action := caFree;

Esto funciona correctamente, los hijos se cierran y nadie protesta. El
problema viene cuando pretendo meter un codigo mas complicado en el
OnClose de los hijos. Mi idea es hacer que cuando se dispare este
evento aparezca un cuadro de dialogo preguntando si se desea guardar
los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
(en el OnClose del hijo):

ShowMessage('La ventana se cerrara');
action := caFree;

da problemas. Supongamos que tenemos tres hijos (con menos hijos no
hay problemas). Al cerrarse el segundo hijo, en el momento que se
intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
violation at address... etc"

Depurando he comprobado que al cerrarse el segundo hijo el valor de
MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
no existe realmente.

Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
otra alternativa para cerrar hijos (aparte de Destroy, que no me
gusta)? He probado el CloseWindow, de la API de windows, pero lo que
hace es minimizar, no cerrar.

Muchas gracias a todos. Espero haberme explicado bien, y que no haya
sido mucha chapa.

Saludos,
Schumacker
Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #3 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #4 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #5 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #6 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #7 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #8 (permalink)  
Antiguo 11-08-2004, 12:58:01
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

en vez de usar el evento onclose , usa el evento onclosequery del form

sacado de la ayuda de delphi

When the user attempts to close the form in this example, a message dialog
appears that asks the user if it is OK to close the form. If the user
chooses the OK button, the form closes. If the user chooses Cancel, the form
doesn't close.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;


"schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> Hola a todos!
> Trabajo con Delphi 7 en Windows 2000
>
> Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> disparen. Es por eso que en el evento OnClose del MainForm pongo el
> siguiente codigo:
>
> for i := 0 to MDIChildCount - 1 do
> MDIChildren[i].Close
>
> De este modo, todos los eventos OnClose de los hijos se llamaran. En
> el codigo OnClose de los hijos tengo el siguiente codigo:
>
> action := caFree;
>
> Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> problema viene cuando pretendo meter un codigo mas complicado en el
> OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> evento aparezca un cuadro de dialogo preguntando si se desea guardar
> los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> (en el OnClose del hijo):
>
> ShowMessage('La ventana se cerrara');
> action := caFree;
>
> da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> hay problemas). Al cerrarse el segundo hijo, en el momento que se
> intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> violation at address... etc"
>
> Depurando he comprobado que al cerrarse el segundo hijo el valor de
> MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> no existe realmente.
>
> Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> otra alternativa para cerrar hijos (aparte de Destroy, que no me
> gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> hace es minimizar, no cerrar.
>
> Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> sido mucha chapa.
>
> Saludos,
> Schumacker



Responder Con Cita
  #9 (permalink)  
Antiguo 11-08-2004, 13:00:03
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

ah se me olvidava, en el onclose, debes dejar el action:=cafree;

"RangerWalker" <RangerWalkerNOTSPAM***terra.es> escribió en el mensaje
news:dRnSc.1865052$A6.7090052***telenews.teleline.es ...
> en vez de usar el evento onclose , usa el evento onclosequery del form
>
> sacado de la ayuda de delphi
>
> When the user attempts to close the form in this example, a message dialog
> appears that asks the user if it is OK to close the form. If the user
> chooses the OK button, the form closes. If the user chooses Cancel, the

form
> doesn't close.
>
> procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
>
> begin
> if MessageDlg('Close the form?', mtConfirmation,
> [mbOk, mbCancel], 0) = mrCancel then
> CanClose := False;
> end;
>
>
> "schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
> news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> > Hola a todos!
> > Trabajo con Delphi 7 en Windows 2000
> >
> > Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> > Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> > disparen. Es por eso que en el evento OnClose del MainForm pongo el
> > siguiente codigo:
> >
> > for i := 0 to MDIChildCount - 1 do
> > MDIChildren[i].Close
> >
> > De este modo, todos los eventos OnClose de los hijos se llamaran. En
> > el codigo OnClose de los hijos tengo el siguiente codigo:
> >
> > action := caFree;
> >
> > Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> > problema viene cuando pretendo meter un codigo mas complicado en el
> > OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> > evento aparezca un cuadro de dialogo preguntando si se desea guardar
> > los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> > ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> > (en el OnClose del hijo):
> >
> > ShowMessage('La ventana se cerrara');
> > action := caFree;
> >
> > da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> > hay problemas). Al cerrarse el segundo hijo, en el momento que se
> > intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> > violation at address... etc"
> >
> > Depurando he comprobado que al cerrarse el segundo hijo el valor de
> > MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> > MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> > esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> > no existe realmente.
> >
> > Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> > invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> > otra alternativa para cerrar hijos (aparte de Destroy, que no me
> > gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> > hace es minimizar, no cerrar.
> >
> > Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> > sido mucha chapa.
> >
> > Saludos,
> > Schumacker

>
>



Responder Con Cita
  #10 (permalink)  
Antiguo 11-08-2004, 13:00:03
RangerWalker
 
Mensajes: n/a
Predeterminado Re: Problema al cerrar aplicaciones MDI

ah se me olvidava, en el onclose, debes dejar el action:=cafree;

"RangerWalker" <RangerWalkerNOTSPAM***terra.es> escribió en el mensaje
news:dRnSc.1865052$A6.7090052***telenews.teleline.es ...
> en vez de usar el evento onclose , usa el evento onclosequery del form
>
> sacado de la ayuda de delphi
>
> When the user attempts to close the form in this example, a message dialog
> appears that asks the user if it is OK to close the form. If the user
> chooses the OK button, the form closes. If the user chooses Cancel, the

form
> doesn't close.
>
> procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
>
> begin
> if MessageDlg('Close the form?', mtConfirmation,
> [mbOk, mbCancel], 0) = mrCancel then
> CanClose := False;
> end;
>
>
> "schumacker" <miguelcampoy***hotmail.com> escribió en el mensaje
> news:e1eadaf3.0408110220.71a936a1***posting.google.c om...
> > Hola a todos!
> > Trabajo con Delphi 7 en Windows 2000
> >
> > Estoy diseñando una aplicacion MDI con un MainForm y varios ChildForm.
> > Al cerrar el MainForm quiero que los eventos OnClose de los hijos se
> > disparen. Es por eso que en el evento OnClose del MainForm pongo el
> > siguiente codigo:
> >
> > for i := 0 to MDIChildCount - 1 do
> > MDIChildren[i].Close
> >
> > De este modo, todos los eventos OnClose de los hijos se llamaran. En
> > el codigo OnClose de los hijos tengo el siguiente codigo:
> >
> > action := caFree;
> >
> > Esto funciona correctamente, los hijos se cierran y nadie protesta. El
> > problema viene cuando pretendo meter un codigo mas complicado en el
> > OnClose de los hijos. Mi idea es hacer que cuando se dispare este
> > evento aparezca un cuadro de dialogo preguntando si se desea guardar
> > los cambios. Ahi surgen los problemas. De hecho, con tan solo hacer un
> > ShowMessage, los problemas aparecen tambien. Por ejemplo, este codigo
> > (en el OnClose del hijo):
> >
> > ShowMessage('La ventana se cerrara');
> > action := caFree;
> >
> > da problemas. Supongamos que tenemos tres hijos (con menos hijos no
> > hay problemas). Al cerrarse el segundo hijo, en el momento que se
> > intenta cerrar el tercer y ultimo hijo, ocurre una excepcion: "Access
> > violation at address... etc"
> >
> > Depurando he comprobado que al cerrarse el segundo hijo el valor de
> > MDIChildCount ha variado, de tres a dos. Por tanto, supongo que en
> > MDIChildren ha desaparecido uno de los hijos, y que entonces el bucle
> > esta intentando acceder a un valor de MDIChildren (MDIChildren[2]) que
> > no existe realmente.
> >
> > Mi pregunta es: ¿Porque ocurre esto? ¿Como hago para mantener
> > invariable el valor de MDIChildren y MDIChildCount? ¿Existe alguna
> > otra alternativa para cerrar hijos (aparte de Destroy, que no me
> > gusta)? He probado el CloseWindow, de la API de windows, pero lo que
> > hace es minimizar, no cerrar.
> >
> > Muchas gracias a todos. Espero haberme explicado bien, y que no haya
> > sido mucha chapa.
> >
> > Saludos,
> > Schumacker

>
>



Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema al cerrar word 2007 Heriberto Martinez Roa Newsgroup microsoft.public.es.word 16 07-07-2008 00:22:03
Problema al cerrar sesión JOSE LUIS Newsgroup microsoft.public.es.windowsvista 2 07-02-2008 17:12:02
problema al cerrar el outlook Jorge Newsgroup microsoft.public.es.outlook 2 07-02-2008 14:11:58
Problema al cerrar Albert Newsgroup es.comp.lenguajes.visual-basic 0 25-01-2008 07:33:57
Cerrar Aplicaciones/procesos en un Terminal Server Jesús Newsgroup es.comp.lenguajes.visual-basic 14 17-01-2005 12:43:49





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.