Delphi - MaskEdit

   
Vista:

MaskEdit

Publicado por Dario (29 intervenciones) el 25/10/2010 22:15:35
Tengo un MaskEdit con formato 99/99/0000 para fecha. Como hago que cuando se ingrese mal la fecha y/o cuando no se ingrese ninguna fecha emita un mensage (Showmessage) de q la fecha esta mal ingresada o que el campo fecha debe ser completado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:MaskEdit

Publicado por Eva (484 intervenciones) el 26/10/2010 00:40:49
Todo esto te lo evitas cogiendo la fecha con un DateTimePicker.

Si de todas formas quieres seguir con el Edit, en el evento OnExit comprubalo y lanza el mensaje.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Ragaru (33 intervenciones) el 26/10/2010 13:34:05
Esta misma pregunta la hice el 28/09/10 y aunque ha sido leida 170 veces
NO he obtenido ninguna respuesta.

El problema es como comprobar que el MaskEdit esta en blanco ya que al
tener la máscara de la fecha _/_/_ para dia mes y año NUNCA estará en blanco,
asi que decidi utilizar el DateTimePicker desde entonces.

Si Eva es tan amable de contestar ahora, tanto Dario como Ragaru le quedarán
muy agradecidos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Eva (484 intervenciones) el 27/10/2010 00:15:43
Pues así (en el evento OnExit del MaskEdit)

try
x := strtodate(MaskEdit1.text);
except
on exception do showmessage('Fecha no correcta');
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Eva (484 intervenciones) el 27/10/2010 00:24:27
Por supuesto que x (o como quieras llamar a la variable) tiene que ser una variable de tipo date

procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
fecha: TDate;
begin
try
fecha := strtodate(MaskEdit1.text);
except
on exception do showmessage('Fecha no correcta');
end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Dario (29 intervenciones) el 02/11/2010 23:52:52
Con esta formula primero salta el error del sistema q esta mal la fecha y luego el mensaje de fecha no correcta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Ragaru (33 intervenciones) el 27/10/2010 13:32:36
He tratado de comprobar la solución que ha propuesta Eva, pero no ha funcionado
No obstante, por mi cuenta, he encontrado la siguiente solución que si funciona:

En el OnExit del MaskEdit se codifica :
var
Dia : String;
begin
Dia := Copy(MaskEdit1.Text, 1,2); // Se copian los dos digitos de Dia

If Dia = ' ' Then
ShowMessage ('Fecha incorrecta');
end;
Nota : Para que funcione no se ha tenido que introducir nada en el MaskEdit1.
Hay que dejar DOS espacios en blanco entre las comillas ' '.
Como se deje un solo espacio no funciona.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por Eva (484 intervenciones) el 27/10/2010 19:05:28
¿Qué significa no ha funcionado?, a mi me controla la entrada de fechas válidas.

Acabo de arrancar en Windows XP, cargo Delphi 7, pongo un EditMask1 con la máscara 99/99/0000 y un Edit1, en el evento OnExit del MaskEdit1 pongo esto

procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
fecha: TDate;
begin
try
fecha := strtodate(MaskEdit1.text);
except
on exception do
begin
showmessage('Fecha no correcta');
MaskEdit1.SetFocus;
end;
end;
Edit1.Text := MaskEdit1.Text;
end;

Compilo y arranco el .exe y controla las fechas válidas

Dejo vacia la fecha y salta el showmessage indicando fecha incorrecta
Pongo fecha 10/12/1990 y no hay problemas
Pongo fecha 10/13/1990 y salta el showmessage indicando fecha incorrecta
Pongo fecha 33/12/1990 y salta el showmessage indicando fecha incorrecta
Pongo fecha 30/02/1990 y salta el showmessage indicando fecha incorrecta
Pongo fecha 29/02/1990 y salta el showmessage indicando fecha incorrecta
Pongo fecha 28/02/1990 y no hay problemas
Pongo fecha 29/02/1992 y no hay problemas (bisiesto)

Lo que pone Ragaru solo contrala la etrada vacía del día y deberías controlar la entrada vacía del mes y el año también porque con esto te ponen la fecha así
12/__ /____
y no detecta nada

En el OnExit del MaskEdit :
var
Dia, Mes, Anio : String;
begin
Dia := Copy(MaskEdit1.Text, 1,2);
Mes := Copy(MaskEdit1.Text, 4,2);
Anio := Copy(MaskEdit1.Text, 7,4);
If (Dia = ' ') or (Mes = ' ') or (Anio = ' ') Then
ShowMessage ('Fecha vacia totalmente o parcialmente');
end;

y esto no te evitaría que te pusieran fechas inválidas como 35/15/2009
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MaskEdit

Publicado por JPG (1 intervención) el 08/11/2010 16:12:14
Pues me parece que debes utilizar el evento onChange del MaskEdit, de manera que si el dato no se cambió o la fecha no está entre los rangos que tú estableces, das un error en un bucle if /Condicion. Puedes "moldear" la fecha al formato que tú pongas.
Comprueba en la ayuda el DateFormat ya que encontrarás funciones de dato-fecha que te ayudarán.
Salucos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar