Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Validar fecha componente TLSDateEdit (https://www.clubdelphi.com/foros/showthread.php?t=87666)

El_Chava 09-02-2015 03:40:41

Validar fecha componente TLSDateEdit
 
1 Archivos Adjunto(s)
Hola amigos del foro estoy desarrollando un sistema con lazarus y necesito validar que el usuario no deje con una fecha invalidad el TLSDateEdit. Es la primera vez que estoy trabajando con este componente y no se como puedo realizar esta validación. Espero me puedan ayudar de antemano muchas gracias.

Neftali [Germán.Estévez] 09-02-2015 18:15:39

En Delphi se suele hacer intentando convertirla dentro de un try..except para ver si la conversión es válida.
Supongo que se puede hacer igual.

GustavoCruz 09-02-2015 22:46:54

Mejor descarga los componentes ZVDateTimeCtrls

GustavoCruz

El_Chava 11-02-2015 04:13:56

2 Archivos Adjunto(s)
Gracias Neftali y GustavoCruz por su pronta respuesta.Les comento que tratando de resolver el problema decide usar el componente que trae por defecto lazarus que es el TDateEdit. Este el código que uso para poder validar que el usuario ha introducido una fecha correcta.

Código:

var
 MyDateTimeVar: TDateTime;
begin
  try
  MyDateTimeVar:= StrToDate(fechaentrega.Text);
  except
    on EConvertError do begin
      Application.MessageBox('La fecha de entrega no es valida, favor de verificar','Error',mb_iconstop);
    end;
  end;
end;

Pero solo en ocasiones detecta el error. Le adjunto unas imágenes donde en una si me detecta el error por ejemplo si solo pongo el mes. pero si pongo día y mes incompletos y no pongo el año, no me muestra ningún mensaje.

Casimiro Notevi 11-02-2015 10:06:49

¿Se supone que has puesto el código en el onexit del componente?
¿Por qué creas un componente en tiempo de ejecución, si ya existe en diseño?

El_Chava 11-02-2015 18:06:34

Hola casimiro el codigo lo puse en el boton de guardar. y no creo el componente en ejecución. Puse el siguiente codigo en el evento onshow de la forma donde tengo el TEditDate.

Código:

ShowMessage(FormatDateTime('DD/MM/YYYY',fechaentrega.Date));
y me muestra que la fecha de entrega tiene el valor de 30/12/1899.

El_Chava 11-02-2015 19:24:40

Al fin logre dar con la respuesta del problema al darme cuenta de lo siguiente: lo que hice fue primeramente ver que valor me esta dando el TDateEdit si ponia los valores de esta manera '2_/2_/____' y en el evento onexit puse el siguiente codigo "dia:=formatDateTime('dd',fechaentrega.Date);mes:=formatDateTime('mm',fechaentrega.Date);anio:=forma tDateTime('yyyy',fechaentrega.Date); " asi me di cuenta que las variables guardaban dia = 30 mes = 12 anio=1899 investigando resulta ser que es la manera en que tDateEdit lo toma como una fecha NULA 30/12/1899 asi que lo que hice fue poner el siguiente codigo:

Código Delphi [-]
procedure TFrmAgregarDocumento.fechaentregaExit(Sender: TObject);
var
MyDateTimeVar: TDate;
ex:integer;
begin
   ex:=0;
   try 
         MyDateTimeVar:= StrToDate(fechaentrega.Text);
  except
        Application.MessageBox('La fecha de entrega no es valida, favor de verificar','Error',mb_iconstop);
        ex:=1;
   end;// end del try
   case ex of
      0:  if FormatDateTime('DD/MM/YYYY',fechaentrega.Date) = '30/12/1899' then
           begin
                 Application.MessageBox('La fecha de entrega no es valida, favor de verificar','Error',mb_iconstop);
           end;
    end;
end;
Asi de esta manera logré que me valide si tengo una fecha valida. Gracias por su ayuda y sugerencias.


La franja horaria es GMT +2. Ahora son las 19:19:47.

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