Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Verificar si un Componente MaskEdit está vacio (https://www.clubdelphi.com/foros/showthread.php?t=92155)

Dergon 11-08-2017 01:08:16

Verificar si un Componente MaskEdit está vacio
 
Hola Expertos,necisitaba una mano,estoy intentando verificar con un boton si el maskedit esta vacio,pero no me va el codigo
Código Delphi [-]
if MaskEdit1.text = '' then
 begin
    showmessage('vacio');
da este error

[IMG]https://ibb.co/hokYMa[/IMG]

roman 11-08-2017 02:23:13

Cuando haces clic en el botón, el MaskEdit pierde el foco y eso hace que en automático se valide el control, y, al no ser correcto el formato, te manda la excepción que muestras. Luego entonces, no puedes hacer la verificación que quieres de esa manera.

La pregunta es: ¿para qué quieres hacer esa verificación si precisamente el control ya se encarga de eso

LineComment Saludos

ecfisa 11-08-2017 02:24:41

Hola.

No sé si entendí bién el problema, pero si te refieres a verificar que no tenga caracteres ingresados por el usuario, podrías hacer:
Código Delphi [-]
function IsMaskEditEmpty(ME: TMaskEdit): Boolean;
var
  tmp: string;
begin
  tmp := ME.EditMask;
  ME.EditMask := '';
  Result := ME.Text = '';
  ME.EditMask := tmp;
end;

Ejemplo de uso:
Código Delphi [-]
...
begin
  if IsMaskEditEmpty(MaskEdit1) then
    ShowMessage('Vacío');
En cuanto al mensaje de error no sé que tratamiento das al contenido... Tal vez te sirva usar como filtros numéricos el caracter 9,que permite un dígito pero no lo requiere y como filtros alfanuméricos al caracter a que permite un caracter pero no lo requiere.

Saludos :)

Dergon 11-08-2017 15:28:56

Cita:

Empezado por roman (Mensaje 520179)
Cuando haces clic en el botón, el MaskEdit pierde el foco y eso hace que en automático se valide el control, y, al no ser correcto el formato, te manda la excepción que muestras. Luego entonces, no puedes hacer la verificación que quieres de esa manera.

La pregunta es: ¿para qué quieres hacer esa verificación si precisamente el control ya se encarga de eso

LineComment Saludos

Lo uso,que cuando apriente el boton si esta vacio el maskedit,dee un mensaje,y si no esta vacio que prosiga el codigo.

Dergon 11-08-2017 15:29:26

Cita:

Empezado por ecfisa (Mensaje 520180)
Hola.

No sé si entendí bién el problema, pero si te refieres a verificar que no tenga caracteres ingresados por el usuario, podrías hacer:
Código Delphi [-]
function IsMaskEditEmpty(ME: TMaskEdit): Boolean;
var
  tmp: string;
begin
  tmp := ME.EditMask;
  ME.EditMask := '';
  Result := ME.Text = '';
  ME.EditMask := tmp;
end;

Ejemplo de uso:
Código Delphi [-]
...
begin
  if IsMaskEditEmpty(MaskEdit1) then
    ShowMessage('Vacío');
En cuanto al mensaje de error no sé que tratamiento das al contenido... Tal vez te sirva usar como filtros numéricos el caracter 9,que permite un dígito pero no lo requiere y como filtros alfanuméricos al caracter a que permite un caracter pero no lo requiere.

Saludos :)

Esta funcion va donde,esque soy novato en esto.

Dergon 11-08-2017 15:51:41

Cita:

Empezado por Dergon (Mensaje 520188)
Esta funcion va donde,esque soy novato en esto.

Aqui estoy pasando unas imagenes.
https://ibb.co/cV901a https://ibb.co/itgr7F https://ibb.co/cYKpuv https://ibb.co/i9yhEv

ecfisa 11-08-2017 16:57:53

Hola.
Cita:

Empezado por Dergon (Mensaje 520188)
Esta funcion va donde,esque soy novato en esto.

Tenes que situarla dentro del área de alcance de uso (que sea visible desde donde la usas), un ejemplo:
Código Delphi [-]
...

implementation

// ( visible a partir de aquí )
function IsMaskEditEmpty(ME: TMaskEdit): Boolean;
var
  tmp: string;
begin
  tmp := ME.EditMask;
  ME.EditMask := '';
  Result := ME.Text = '';
  ME.EditMask := tmp;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MaskEdit1.EditMask := '!99/99/9999;1;_'
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsMaskEditEmpty(MaskEdit1) then
    ShowMessage('Vacío');
end;
...
También podrías situar la declaración de la función en la sección de interfaz (interface) de otra unidad, el código en su implementación (implementation) e incluirla, etc.

Para mas información revisa este enlace: Como declarar una función

Saludos :)

roman 11-08-2017 17:27:58

Cita:

Empezado por Dergon (Mensaje 520187)
Lo uso,que cuando apriente el boton si esta vacio el maskedit,dee un mensaje,y si no esta vacio que prosiga el codigo.

A ver, voy a ampliar un poco el panorama:

Si el usuario entra al control, no hace nada y sale, entonces, no ocurre la validación interna y ahí puedes usar la función que te pone ecfisa.

Pero, si el usuario hace algún cambio, aunque luego vacíe el control; al intentar salir (por ejempo al pasar el foco al botón), el control lanzará la validación antes de que ocurra el evento OnClick del botón; antes, incluso, del evento OnExit del control, de manera que la función de ecfisa no te servirá en esos casos.

De todas formas, esa función sí te sirve para el primer caso y, en mi opinión, tgendrías que llamarla en el evento OnExit del MaskEdit.

LineComment Saludos

ecfisa 11-08-2017 17:51:03

Hola roman.

Claro, totalmente de acuerdo, siempre deberá respetar las restricciones impuestas en la máscara, de otro modo no pasará la validación interna.

Pero si usa los filtros '9' o 'a' (permitido, pero no requerido) podrá borrar todo el contenido del MaskEdit y salir de él sin obtener ningún error. En ese caso puede usar la función para verificar si está vacío (eso supuse que deseaba hacer).


Saludos :)

roman 11-08-2017 18:15:32

Tienes razón. De hecho ahora veo que el mensaje que le manda no es el del control como supuse sino de una conversión.

LineComment Saludos

Dergon 13-08-2017 00:48:32

Ya mirando aqui las respuestas e probado las instruciones de ecfisa,el codigo va de maravilla,y agradesco mucho el tiempo que dan para responder,si el maskedit esta vacia ,al preciosar el boton va hasta la linea del mensaje,pero al informar un numero sin informar toda la fecha,resalta directamente el error,como prodria yo evitar ese error.

Dergon 15-08-2017 16:24:45

:confused:
Cita:

Empezado por Dergon (Mensaje 520208)
Ya mirando aqui las respuestas e probado las instruciones de ecfisa,el codigo va de maravilla,y agradesco mucho el tiempo que dan para responder,si el maskedit esta vacia ,al preciosar el boton va hasta la linea del mensaje,pero al informar un numero sin informar toda la fecha,resalta directamente el error,como prodria yo evitar ese error.


ecfisa 15-08-2017 19:31:22

Hola Dergon.

¿ Podrías publicar la máscara que definiste para el MaskEdit ?

Saludos :)

Dergon 16-08-2017 03:30:13

!99/99/9999;1;_ es asi como la tengo en el maskedit.

movorack 16-08-2017 16:06:37

Ya que en la consulta esto recibirá una fecha. ¿No seria mejor usar un DateTimePicker?

ecfisa 16-08-2017 19:12:10

Hola.

Entonces no estoy entendiendo la situación, con esa máscara me permite salir del control con ingresos tales como:
Código:

1 /  /
1 /11/
__/__/2017

Y es lógico por que la máscara está indicando que en cada posición se admite un dígito numérico pero no es necesariamente requerido.

Ahora, siendo sinceros, de ese modo su función pierde sentido ya que no está verificando si el contenido es una fecha válida... :)

Saludos :)

Dergon 16-08-2017 23:13:49

Muchas gracias a los moderadores,lo del maskedit lo estaba haciendo de forma incorrecta para manejar datos de fechas,puse el tdatetimepicker,solo que al validar la fecha com mi ibquery,el como si fuese que no e puesto ninguna fecha,el projecto compila sin problemas

Aqui el codigo
Código Delphi [-]
  dm_dados.sqlConVenta.ParamByName('datavend').value :=DateTimePicker1.DateTime ;

Dergon 17-08-2017 16:50:16

Solucionado
 
Logre solucionar de esta manera.

Código Delphi [-]
dm_dados.sqlConVenta.ParamByName('datavend').Text :=DateToStr (DateTimePicker1.Date);


La franja horaria es GMT +2. Ahora son las 03:11:35.

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