PDA

Ver la Versión Completa : Validar fecha componente TLSDateEdit


El_Chava
09-02-2015, 03:40:41
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 (http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/ZVDateTimeCtrls/tags/1.5/)

GustavoCruz

El_Chava
11-02-2015, 04:13:56
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.


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.


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:=format DateTime('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:

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.