Cancelar pérdida de foco en formulario


([N4] eic) #1

Hola.

Estoy intentando hacer la comprobación de un campo de formulario al perder el foco. Si la condición no se cumple, cancelo la entrada de datos y vuelve al campo.

 

Objetos que uso:

1) Función que comprueba el formato del campo y devuelve 1 (correcto) o 0 (incorrecto). Si es incorrecto, muestra un mensaje (con la función Mensaje) y se sale.

2) Evento que llama a la función y, si el resultado es incorrecto, se sale con un "Set retorno proceso = NO"

3) Conexión de evento al perder el foco el campo, que llama al evento anterior

 

Resultados:

a) Si la comprobación del campo es correcta, ningún problema.

b) Si la comprobación es incorrecta, pasa lo siguiente:

b.1) Muestra el mensaje (bien)

b.2) El puntero pasa a reloj de arena... y queda ahí hasta que cierras la aplicación (mal)

b.3) El cursor pasa al siguiente campo (mal) y además queda otro cursor parpadeante en el campo que acabo de comprobar (desconcertante!). Paso a tener dos cursores, pero sólo uno, lógicamente, es de verdad (cuando escribo, se escribe en uno)

Si hago que el mensaje se presente en el evento, en vez de en la función, consigo que el puntero no se quede en reloj de arena, pero el segundo efecto (doble cursor) sigue pasando.

 

¿Es ésta la manera correcta de realizar este proceso?

 

Saludos,

Fran Varona

 

 

 


([N4] rcueto.velneo) #2

Hola, Fran:

Sobre los resultados comentarte que (b.2), en las pruebas que hemos realizado, el cursor se transforma en reloj de arena mientras el mensaje esta abierto, pero una vez cerrado vuelve al estado de puntero. (b.3) El comportamiento que indicas lo hemos añadido a nuestro sistema de gestión de incidencias (código nº 843)- no obstante, añadirte que tienes un comando de interfaz que te permite controlar el foco, asi que puedes añadir al proceso el comando de instrucción Interfaz: Activar foco objeto para retornar el foco al edit.

Gracias por tu colaboración.

Un saludo.


([N4] eic) #3

Hola, Rafael.

El problema de que se convierta el puntero en reloj de arena me pasa sólo si el mensaje se muestra en la función. Si, en cambio, se muestra en el evento, no hay problema. Lo he reproducido varias veces, para asegurarme.

En cuanto a la función de interfaz, no quería usarla porque suponía que el "set retorno proceso=NO" debería cumplir su función. Al menos, es un sustituto, hasta solucionar la incidencia. Por cierto... no veo la incidencia 843.

Muchas gracias,

Fran Varona


([N4] eic) #4

Hola.

Más problemas:

Ahora, el evento lo que hace es lo siguiente:

- Comprueba el resultado de la función (si el formato del campo es el correcto)

- Si no lo es, presenta un Mensaje y utiliza el comando "Interfaz: activar foco objeto" para quedarse en el mismo campo (es decir, para no seguir el foco al siguiente)

 

Resultado:

- Si la comprobación es incorrecta, muestra el mensaje (bien), el puntero queda en reloj de arena (mal), y el cursor queda en el campo (bien), pero NO se visualiza. Puedo escribir, pero no veo el cursor parpadeante. 

- Una vez que sucede eso, aunque escriba el campo de modo correcto (comprobación correcta), el puntero no vuelve.

 

¿Qué estoy haciendo mal? Gracias,

Fran Varona

 

 


([N4] eic) #5

Adjunto el evento.

Saludos,

Fran Varona

 

[attachment=3879,404]


([N4] fgutierrez.velneo) #6

Viendo lo que muestras en el mensaje, recuerda que tienes la posibilidad de usar la máscara para los controles de edición, lo que te permite controlar la forma en que introduce los datos el usuario.

Un saludo.

 


([N4] eic) #7

Hola.

Muchas gracias por la sugerencia (que pondré en práctica ahora mismo). De todos modos, creo que es un proceso habitual hacer algún chequeo a la pérdida de foco, y volver al mismo punto si no se cumple. ¿Cómo tendría que hacerlo?

Y... ¿algún sitio donde pueda encontrar cómo se formatean las máscaras?

Muchas gracias,

Fran Varona

 

 


([N4] fgutierrez.velneo) #8

Cómo debes hacerlo es tal y como te indicó mi compañero, usando el comando de interfaz Activar foco. Puedes verlo programado y en ejecución en vBugMan en el catálogo de Velneo Open Apps.

El formulario de la incidencia tiene un evento asociado al botón aceptar comprueba que las condiciones de los campos, y si alguno no la cumple (en la mayor parte se trata de que estén cubiertos) lleva al control en el que el usuario ha de completar el dato. Incluso modifica la paleta del control en tiempo de ejecución para que se muestre con colores vivos que indiquen más claramente al usuario del error que se ha producido.

El formato de las máscaras lo tienes en la zona info, a la que puedes acceder desde esta web o desde el propio Velneo vDevelop V7 en la opción de ayuda. Puedes ver la del apartado referido al control de edición, o el de cada uno de los tipos de control, verás que están disponibles en función de ese tipo. Te copio las de el control de edición:

 

 

 

 

 

Máscara: Permite aplicar una máscara para formatear el texto. Las máscaras disponibles son:

Espacio en blanco: Cualquier caracter

A: Carácter ASCII requerido. A-Z, a-z.

a: Carácter ASCII alfabético permitido pero no requerido.

N: Carácter ASCII alphanumeric character required. A-Z, a-z, 0-9.

n: Carácter ASCII alfanumérico permitod pero no requerido.

X: Requerido cualquier carácter.

x: Cualquier carácter permitido pero no requerido.

9: Dígito ASCII requerido. 0-9.

0: Dígito ASCII permitido pero no requerido.

D: Dígito ASCII requerido. 1-9.

d: Dígito ASCII permitido pero no requerido. 1-9.

#: Signo más o menos permitido pero no requerido.

H: Carácter hexadecimal requerido. A-F, a-f, 0-9.

h: Carácter hexadecimal permitdo pero no requerido.

B: Carácter binario requerido. 0-1.

b: Carácter binario permitido pero no requerido.

>: Los siguientes caracteres irán en mayúsculas.

<: Los siguientes caracteres irán en minúsculas.

!: Finaliza la conversión a mayúsculas o minúsculas.

: Usar el caracter con algún símbolo de los anteriores para ser usado como separador.

Máscaras para horas:

Horas:

h: (0-23, 1-12 AM/PM)

hh: (00-23, 01-12 AM/PM)

H: (0-23)

HH: (00-23)

Minutos:

m: (0-59)

mm: (00-59)

Segundos:

s: (0-59)

ss: (00-59)

z: (0-999) zzz (000-999)

Periodos:

AP: (AM/PM)

ap: (am/pm)

Máscaras para fechas:

Día:

d: (1-31)

dd: (01-31)

ddd: (Lun-Dom)

:dddd: (Lunes-Domingo)

Mes:

M: (1-12)

MM: (01-12)

MMM: (Ene-Dic)

MMMM: (Enero-Diciembre)

Año:

yy: (00-99)

yyyy: (0000-9999)

El resto de caracteres en la cadena de formato serán tratados como

texto. También los caracteres que estén entre comillas simples ( ’ ) en

la cadena de formato serán tratados como texto, lo que nos permite

tratar los caracteres específicos de formato (d, dd, M, MM, etc.) como

texto.

 

 

 

 

 

Un saludo.

 

 

 

 

 

 


([N4] eic) #9

Hola.

Lo primero, disculpas por no encontrar la definición de la máscara en la zona info. Miré donde no tenía que mirar (en info, pero en otro sitio), y lancé una búsqueda global que sólo me enseñaba un par de mensajes del foro. 

Puede que el problema con el foco está en que estoy saliendo del mismo control al que quiero volver.

Gracias,

Fran Varona

 


([N4] fgutierrez.velneo) #10

Ya te digo que el funcionamiento normal es con Activar foco. Set retorno NO no está programado para ese uso.

Ten en cuenta que Velneo V7 no es 6.X. La filosofía es similar pero en algunos casos no tiene por qué funcionar exactamente igual. Al tener Activar foco no tiene tanto sentido el uso de Set retorno para esa misma funcionalidad.

 

Un saludo.


([N4] rcueto.velneo) #11

Hola de nuevo:

En las pruebas que hemos hecho, efectivamente, solamente aparece el cursor si el mensaje es emitido desde la función llamada (o un subproceso llamado). Solamente aprece además, cuando pasamos el cursor por la ventana del mensaje -pero no si está fuera de ella-. Lo hemos incluido en nuestro sistema de gestión de incidencias con el código 1515.

El cuanto al uso del comando de instrucción que te indicamos realmente no es un sustituto, es el comando que en Velneo V7 se usa para comtrolar el foco de los controles.

Con respecto a la incidencia 843, decirte que revisaremos por qué no aparece.

Gracias y un saludo.