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 11-05-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Cancelar accion de un evento OnExit

Hola nuevamente!

Se me hizo facil en un edit colocar un mensaje en el evento OnExit del mismo

Código Delphi [-]
procedure TMainFrm.edPlacasExit(Sender: TObject);
begin
  if edPlacas.Text = '' then
    begin
      Showmessage('¡Este Campo no puede estar Vacio!');
      edPlacas.SetFocus ;
    end
  else
    edPlacas.Color := ColorOrigen;
end;

Cuando se ingresa un dato salta al siguiente edit con el mismo evento. SI todos esos campos se llenan no hay problema todo funciona OK. El problema surge cuando quiero cancelar el ingreso de datos por x razon. Para cancelar tengo un Boton con su evento Onclik, sin embargo este no funciona, solo al cerrar el formulario se anula toda accion.

Alguien sabe como puedo resover esto? Se agradece la ayuda.
Responder Con Cita
  #2  
Antiguo 11-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Este tipo de procedimientos tiene un fallo: Si el usuario no entra en ese Edit, no tendrá que salir, y por tanto, no se ejecuta el código.

Si no usas Bases de datos, lo mejor es que en el botón de Guardar Cambios, llames a un procedimiento que valide todas las posibles opciones:
Código Delphi [-]
function TForm1.ValidaTextos:Boolean
begin 
 Result := Trim(edplacas.text) <> EmptyStr;
 Result := Result and Trim(eddireccion.text) <> EmptyStr;
....

end;

procedure TForm1.Form1CloseQuery(.... var CanClose :Boolean);
begin 
  CanClose := ValidaTextos;
end;

Ya de camino he puesto la comprobación al cerrar el form, pero también deberías llamar a esa función antes de guardar los datos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 11-05-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
hola nuevamente!

No se si sea correcto continuar aqui pero en caso contrario por favor le solicito a los moderadores que lo muevan.

Lepe, por el momento me "brinque" el procedimiento del OnExit del Edit asi que hago esto con el boton de guardar cambios:

Código Delphi [-]
//Capturamos el peso e insertamos los datos en la bd
procedure TMainFrm.btnPesarClick(Sender: TObject);
begin
  btnPesar.Enabled := False;
  g_iEntrada := 0;
  if  (g_strEstado = 'M') then
    showmessage('¡La Báscula tiene movimiento ESPERE!')
  else if (g_strEstado = 'U') then
    showmessage('¡EL PESO ES NEGATIVO!')
  else
    try
      begin
        lblPesoCap.Caption := g_strDatos;
        frmDatos.MDOEntrada.Append;
        frmDatos.MDOEntrada.FieldByName('FOLIO').Value := tmpFolio ;
        frmDatos.MDOEntrada.FieldByName('PLACAS').Value := edPlacas.Text ;
        frmDatos.MDOEntrada.FieldByName('CLIENTE').Value := dbCliente.Text ;
        frmDatos.MDOEntrada.FieldByName('PRODUCTO').Value := dbProducto.Text ;
        frmDatos.MDOEntrada.FieldByName('OPERADOR').Value := edOperador.Text ;
        frmDatos.MDOEntrada.FieldByName('PESO_ENT').Value := g_strDatos;
        frmDatos.MDOEntrada.FieldByName('HF_ENT').Value := Now;
        frmDatos.MDOEntrada.Post;
      end;
    except
    on E:Exception do
      begin
        ShowMessage('¡ERROR al actualizar la base de datos!');
      end;
  end;

en el OnValidate del TField PLACAS

Código Delphi [-]
procedure TfrmDatos.MDOEntradaPLACASValidate(Sender: TField);
var
  Query: TMDOSQL;
begin
  if Trim(MDOEntrada.FieldByName('PLACAS').AsString) <> '' then
  begin
    Query := TMDOSQL.Create(nil);
      try
        Query.Database := frmCnx.MDODatabase1 ;
        Query.Transaction := frmCnx.MDOTransaction3 ;
        Query.SQL.Text := 'SELECT Placas FROM ENTRADA WHERE Placas = :Valor';
        Query.ParamByName('Valor').Value :=
                                  MDOEntrada.FieldByName('PLACAS').AsString;
        query.ExecQuery ;
        try
          if Trim(Query.Fields[0].AsString) <> '' then
            begin
              showmessage('¡Estas Placas estan duplicadas!');
              Abort;
            end;
        finally
          query.Close ;
        end;
      finally
        query.Free;
      end;
  end
  else
  begin
    ShowMessage('El campo placas es necesario');
    Abort;
  end;
end;

los dos mensaje de advertencia me aparecen si el campo placas esta duplicado o vacio, sin embargo al llenar el edit que contiene ese valor y volver a ejecutar el procedimiento PesarClick la BD me regresa un error
de que el campo placas es null. No entiendo que esta pasando. Se agradece toda la ayuda.

EDITO: uso D7, MDO, FB2.0
Responder Con Cita
  #4  
Antiguo 11-05-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Otra cosa que se me ocurre hacer es desplazar forzosamente el foco (SelectNext(Self, True, True) al intentar retirarte, y manejar una bandera o disparar una error al validar el valor al retirar el foco.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 11-05-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
uuuufffff! Nuevamente aqui!

Gracias Federico por tu respuesta pero sinceramente no te entendi, podrias explicarmelo con manzanas y palitos? Nuevamente gracias.
Responder Con Cita
  #6  
Antiguo 11-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
En un hilo relacionado te he contestado.

No sé si te gustará aquel método que soluciona este problema también.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, 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
Evento 'OnExit' del Form Wellnic OOP 3 10-04-2007 19:08:51
Error en evento OnExit en TDBEdit halcon_rojo Varios 1 27-04-2006 23:17:19
Problemas con evento OnExit santi33a Varios 4 15-04-2006 13:30:50
Evento OnExit de un Edit Caro OOP 1 03-02-2006 17:57:01
OnExit DarioArg Varios 2 12-03-2005 02:34:55


La franja horaria es GMT +2. Ahora son las 23:01:21.


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