Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
El evento onCloseQuery está precisamente para evitar cerrar un formulario.
Cuando tu presionas en la X se dispara primero el evento onCloseQuery, si tiene asignado algún código en este evento se ejecutará. De otro modo se procede con onClose.

Es decir el orden es:

1). "Preguntar si tiene asignado onCloseQuery": que hacer al momento de recibir la orden de cierre.
2). "Preguntar si tiene asignado onClose": que hacer al momento del cierre.

Ahora, si lo que tu quieres es deshabilitar la X hay varias maneras de hacerlo. Una manera es seteando la propiedad BorderIncons en vacio.
Hay otros trucos para conseguirlo (que en este momento no recuerdo), pero en lo personal no prefiero ocultar dicho botón.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 05-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 20
jorgegetafe Va por buen camino
Lo único que quiero es que cuando se presione la X, salga el típico mensaje de ¿Quiere usted guardar antes de salir? y no que directamente se cierre el programa perdiendo todo...

Lo del mensaje se hacerlo, pero no se como utilizar el onCloseQuery.
Responder Con Cita
  #3  
Antiguo 05-06-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
El código que te expuse son un ejemplo de como se usa en OnCloseQuery.

Lo que tu necesitas hacer es una combinación del onCloseQuery y OnClose.
Si lo que deseas es que el formulario se cierre independientemente si debe o no guardar los cambios deberás hacerlo empleando una variable pública o global que te permita decidir si debe guardar o no. CanClose Deberá ser True.

De modo que que debes hacer algo por el estilo:

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var Rta: integer;
begin
 Rta := MessageBox(0, '¿Quiere usted guardar antes de salir?', 'Advertencia', MB_ICONQUESTION or MB_YESNO);
 if Rta = IDYES
    then DebeGuardar := True
    else DebeGuardar := False;

 CanClose := True; //De cualquier modo debe cerrarse. False para que no se cierre
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if DebeGuardar
     then GuardarCambios;
  Action := caFree; //caFree para que libere la memoria ocupada
end;

procedure TForm1.GuardarCambios;
begin
 // Lo que debas hacer...
end;

Espero haber sido más claro.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 05-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 20
jorgegetafe Va por buen camino
Vale gracias, esta tarde si tengo tiempo lo pondré ;-)
Responder Con Cita
  #5  
Antiguo 05-06-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por jorgegetafe
Vale gracias, esta tarde si tengo tiempo lo pondré ;-)
Hola, puede ser que hoy amanecí muy sensible y me has de perdonar estimado jorgegetafe, pero me parece una respuesta no muy cordial de alguien que si se tomo el tiempo de contestar, pero como te digo, se me hace que no dormi bien.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 05-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 20
jorgegetafe Va por buen camino
Cita:
Empezado por egostar
Hola, puede ser que hoy amanecí muy sensible y me has de perdonar estimado jorgegetafe, pero me parece una respuesta no muy cordial de alguien que si se tomo el tiempo de contestar, pero como te digo, se me hace que no dormi bien.
Salud OS.
:-( Se lo he agradecido y le he dicho que en cuanto pueda lo probaré... ahora mismo no puedo... creo que no hago daño a nadie...
Responder Con Cita
  #7  
Antiguo 05-06-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por jorgegetafe
:-( Se lo he agradecido y le he dicho que en cuanto pueda lo probaré... ahora mismo no puedo... creo que no hago daño a nadie...
Perdona como te dije, por supuesto que le agradeces y hasta ahi hubiese estado bien, pero eso de que si tienes tiempo lo pones es lo que me parece no tan cordial.

No me hagas caso, como te digo, amaneci muy susceptible. sea la paz.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 06-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 20
jorgegetafe Va por buen camino
Wueno un par de dudas.

Arriba, en la definición de tipos he tenido que poner esto, porque sino decia que ambas funciones no estaban declaradas, no se si estará bien hecho:

Código Delphi [-]
 
PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean);
PROCEDURE FormClose(Sender: TObject; var Action: TCloseAction);

No me dejaba poner el tform1 delante.

Luego he puesto este codigo:

Código Delphi [-]
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  var
    Rta: integer;
  begin
    Rta := MessageBox(0, '¿Quiere usted guardar antes de salir?', 'Advertencia', MB_ICONQUESTION or MB_YESNO);
    if Rta = IDYES then
      DebeGuardar:= True
    else
      DebeGuardar := False;
    CanClose := True; //De cualquier modo debe cerrarse. False para que no se cierre
end;

PROCEDURE TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  BEGIN
    IF DebeGuardar THEN
      Guardar1Click(Sender);
    Action := caFree; //caFree para que libere la memoria ocupada
  END;

Y el programa cuando le doy a cerrar no me hace absolutamente nada. ¿Me podeis ayudar? gracias.
Responder Con Cita
  #9  
Antiguo 06-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Ya tienes el código, ahora solo tienes que enlazarlo a la ventana. Quiero decir, ahora mismo tienes creados dos procedimientos, pero hace falta decirle que responda cuando se quiere cerrar el form.

Haz un clic sobre la ventana (donde no haya paneles ni botones), ve al inspector de objetos, pestaña eventos, y allí busca el evento FormClose y FormCloseQuery, dale un clic a la lista y elige los que tú has definido para ellos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 06-06-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 20
jorgegetafe Va por buen camino
Ok ya está hecho, ahora ya tiene más nivel jejeje. gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
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
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mensaje - Evento... antes de perder el foco, es posible??? ariefez Varios 11 13-07-2007 23:28:21
Mensaje Raro al Salir aplicacion JULIOCTORRESG Varios 6 14-12-2006 22:06:30
Preguntar antes de salir de aplicacion jorgesl Varios 6 19-04-2006 20:25:15
Salir de un While alfredosg19 Varios 5 17-03-2005 02:09:07
COmo genero un mensaje antes de un Sysutils.Abort Bitbanner Conexión con bases de datos 19 16-02-2005 17:41:58


La franja horaria es GMT +2. Ahora son las 14:26:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi