Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Poder: 0
senda Va por buen camino
Comrpobar datos introducidos por usuario

Hola tengo un formulario muy simple en el que se piden varios datos al usuario. Al final del mismo he colocado un botón de "Aceptar". Antes de mostrar el siguiente formulario se realizan una serie de comprobaciones sobre los datos introducidos, en caso de encontrar algún error muestro un mensaje de aviso. El problema es que cuando pulso el botón aceptar del cuadro de mensaje de aviso, se muere tanto el cuadro de mensaje, como el formulario (se alcanza el end del porcedimiento asociado al evento 'onClick'). ¿Cómo puedo evitarlo? Es decir, ¿como puedo dejar el formulario como está tras detectar el error? Muchas gracias, sé que es una duda absurda, pero me he atascao.
Responder Con Cita
  #2  
Antiguo 05-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola senda
No crees que se podria guiar uno un poco mas con el codigo del botoncito.?
Saludos
Responder Con Cita
  #3  
Antiguo 05-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Si estas utilizando el evento OnClose para cerrar el formulario, verifica el parámetro Action de este evento, si lo estableces a "caNone", el formulario no se cerrará.

Otra opción es verificar en el evento OnCloseQuery del formulario y utilizar la opción "CanClose".

busca información sobre esto y encontrarás muchos resultados y formas de como solucionarlo.
__________________

Responder Con Cita
  #4  
Antiguo 05-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En verdad das pocos datos, senda. Pero supongo que tu situación es esta:

Abres el formulario con ShowModal y el botón Aceptar tiene puesta su propiedad ModalResult en mrOk. Luego de las comprobaciones, el ModalResult hace que se cierre el formulario independientemente de si hubo error o no.

Tampoco dices en qué parte estás poniendo el código de verificación, aunque lo usual es no hacerlo en el OnClick del botón sino en el evento OnCloseQuery del formulario. Este evento lleva un parámetro, CanClose, que te sirve para indicarle al formulario si ha de cerrarse o no. En caso de error, únicamente debes poner CanClose en false para evitar que se cierre.

Para saber si el usuario oprimió el botón Aceptar, cotejas el valor de ModalResult:

Código Delphi [-]
procedure TFormAlgo.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if ModalResult = mrOk then
  begin
    if HayAlgunErrorEnLosDatos then
      CanClose := false;
  end;
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 05-06-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Poder: 0
senda Va por buen camino
Lo siento por ser tan poco específico y no proporcionar todos los datos oportunos. Efectivamente creo que los tiros van por donde dice roman puesto que mi boton tiene ModalResult en mrOk.

Cita:
Empezado por roman
Tampoco dices en qué parte estás poniendo el código de verificación, aunque lo usual es no hacerlo en el OnClick del botón sino en el evento OnCloseQuery del formulario. Este evento lleva un parámetro, CanClose, que te sirve para indicarle al formulario si ha de cerrarse o no. En caso de error, únicamente debes poner CanClose en false para evitar que se cierre.
Muchas gracias soy bastante nuevo en Delphi y no tenía ni idea de la metodología a emplear en este tipo de situaciones.
Responder Con Cita
  #6  
Antiguo 05-06-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Poder: 0
senda Va por buen camino
¿Quien lanza la ejecución del procediemiento FormCloseQuery?

He implementado la solución propuesta por roman, pero no consigo que se ejecute (he dejado el botón ACEPTAR sin ningún procedimiento asociado).
Responder Con Cita
  #7  
Antiguo 05-06-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Poder: 0
senda Va por buen camino
Cita:
Empezado por senda
¿Quien lanza la ejecución del procediemiento FormCloseQuery?

He implementado la solución propuesta por roman, pero no consigo que se ejecute (he dejado el botón ACEPTAR sin ningún procedimiento asociado).
Vale, lo he colocado en el evento OnCloseQuery del formulario. La única pega que se me plantea ahora, es que, ahora mismo, no hay ninguna diferencia entre pulsar el botón ACEPTAR y cerrar directamente el formulario. No entiendo muy bien cómo controlar esto con la propiedad ModalResult.
Responder Con Cita
  #8  
Antiguo 05-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
FormCloseQuery lo lanza el propio Formulario cuando el usuario cierra de alguna forma la ventana.

Una ventana, como sabes, tienes varias formas de cerrarse:
- Boton X
- pulsando ctrl+ F4 en entornos MDI
- Usando el icono de la izquierda de la barra de título.
- Si tenemos algún botón que ordene cerrar o liberar de memoria la ventana.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 05-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por senda
no hay ninguna diferencia entre pulsar el botón ACEPTAR y cerrar directamente el formulario. No entiendo muy bien cómo controlar esto con la propiedad ModalResult.
Pero si es justo lo que dije después de

Cita:
Empezado por roman
Para saber si el usuario oprimió el botón Aceptar, cotejas el valor de ModalResult:
// Saludos
Responder Con Cita
  #10  
Antiguo 05-06-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Yo tengo una inquietud mas que pregunta, que gano yo al usar OnCloseQuery en lugar desolo OnClose.

Con el evento OnClose hago esto

Código Delphi [-]
 
if MessageDlg('¿ Realmente desea salir de Sistema ?', mtInformation,
     mbYesNOCancel, 0) = mrYes then  begin
     if validaPass then begin
        ShowMessage('Se ha solicitado salir de este proceso, '+
                    'es posible que pierda información y no será posible recuperarla');
        SioDTR(Port,'C');
        SioRTS(Port,'C');
        SioDone(Port);
        SioDone(Port1);
        Action := caFree;
     end
     else begin
            ShowMessage('Password invalido, intente de nuevo');
            Action := caNone;
          end;
  end
  else Action := caNone;
end;

y con el evento OnCloseQuery podría hacer esto

Código Delphi [-]
  
if MessageDlg('¿ Realmente desea salir de Sistema ?', mtInformation,
     mbYesNOCancel, 0) = mrYes then  begin
     if validaPass then begin
        ShowMessage('Se ha solicitado salir de este proceso, '+
                    'es posible que pierda información y no será posible recuperarla');
        SioDTR(Port,'C');
        SioRTS(Port,'C');
        SioDone(Port);
        SioDone(Port1);
        CanClose := True;
     end
     else begin
            ShowMessage('Password invalido, intente de nuevo');
            CanClose := False;
          end;
  end
  else  CanClose := False;
end;

Pero mi inquietud es ¿que es mejor?

Usar el evento OnCloseQuery ó el evento OnClose.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #11  
Antiguo 05-06-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Poder: 0
senda Va por buen camino
Cita:
Empezado por roman
Pero si es justo lo que dije después de
Cita:
Empezado por roman
Para saber si el usuario oprimió el botón Aceptar, cotejas el valor de ModalResult:
Cierto, llevas razón, me hice un lío al situar la función ShowMessage (para comprobar por qué código se ejecutaba en cada momento). Funciona a la perfección, muchas gracias.
Responder Con Cita
Respuesta



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
Grabar datos definodos por el usuario en B.D frankmch Conexión con bases de datos 8 05-12-2007 18:46:58
Recuperar Datos de Usuario esimon Windows 5 25-04-2006 18:39:31
¿Cómo obtener y manejar datos del usuario activo? JaviP Firebird e Interbase 3 13-05-2005 23:28:04
duda agreando usuario a la base de datos alachaise PHP 1 26-11-2004 22:58:48
Mejor Base de datos en Usuario GeoAvila Conexión con bases de datos 1 02-04-2004 02:16:59


La franja horaria es GMT +2. Ahora son las 16:07:36.


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
Copyright 1996-2007 Club Delphi