Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
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]

Última edición por roman fecha: 11-08-2017 a las 02:11:46. Razón: Corregir enlace a la imagen
Responder Con Cita
  #2  
Antiguo 11-08-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 11-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 11-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
Cita:
Empezado por roman Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 11-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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.
Responder Con Cita
  #6  
Antiguo 11-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
Cita:
Empezado por Dergon Ver Mensaje
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
Responder Con Cita
  #7  
Antiguo 11-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Dergon Ver Mensaje
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 11-08-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Dergon Ver Mensaje
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
Responder Con Cita
  #9  
Antiguo 11-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 11-08-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #11  
Antiguo 13-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 15-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
Cita:
Empezado por Dergon Ver Mensaje
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.
Responder Con Cita
  #13  
Antiguo 15-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Dergon.

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

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 16-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
!99/99/9999;1;_ es asi como la tengo en el maskedit.
Responder Con Cita
  #15  
Antiguo 16-08-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Ya que en la consulta esto recibirá una fecha. ¿No seria mejor usar un DateTimePicker?
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #16  
Antiguo 16-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 16-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
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 ;
Responder Con Cita
  #18  
Antiguo 17-08-2017
Dergon Dergon is offline
Miembro
 
Registrado: nov 2015
Posts: 38
Poder: 0
Dergon Va por buen camino
Solucionado

Logre solucionar de esta manera.

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
¿Como sé si maskedit está vacío? danielmj Varios 2 25-11-2014 00:15:40
Verificar si un HWND esta con focus? Alejo15x API de Windows 1 16-03-2010 11:58:29
verificar si una aplicacion esta corriendo dblx Varios 12 15-12-2006 02:29:31
Verificar si esta instalada una fuente victork_py Varios 2 22-10-2003 20:23:39


La franja horaria es GMT +2. Ahora son las 12:36:57.


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