NO se como se usa eso. Tengo un visor HTML que se llama CARGANDO con condicion visible de la variable local CARGANDO=1 en un formulario. Un botón que ejecuta un manejador con esto.
Set CARGANDO=1
Interfaz: Mostrar(CARGANDO)
Esperar 10000
Set CARGANDO=0
Interfaz: Ocultar(CARGANDO)
Debería al pulsar el boton aparecer el visor CARGANDO durante 10s y ocultarlo. Pues no funciona ¿Porque?
El objetivo es sacar un mensaje mientras se sube un fichero binario…
Es un comportamiento implícito de Velneo. El Interfaz no se refresca mientras se está ejecutando un proceso, es decir, los efectos en el Interfaz solo se ven cuando termina el proceso. En este caso Mostrar y Ocultar dentro del mismo proceso no tendrá efecto visual.
Sin embargo, prueba a insertar antes de la línea “Esperar 10000” el comando Mensaje (“Cargando”,Información,1,).
El comando Mensaje parece que sí refresca el Interface.
Existe una función JavaScript que sí refresca el Interface cuando estamos ejecutando un proceso o manejador de evento.
Es la función theApp.processEvents() que procesa los eventos que haya en la cola de la aplicación, excluyendo los de entrada de usuario (teclado, ratón…).
Así que sustituye el comando Mensaje(…) por “Set (LOK, /JAVASCRIPT/theApp.processEvents())” y listo.
/JAVASCRIPT/ es la notación que emplea Velneo para indicar que se ha usado una fórmula Javascript.
El comando SET asigna un valor a LOK usando una fórmula Javascript (ver imagen adjunta).
No siempre es posible hacer esto. En este caso sí porque tenemos acceso al objeto theApp desde la fórmula javascript.
Bien, hasta ahora todo correcto, quiero hacer un efecto loader cuando subo un fichero binario al servidor que puede ser mas o menos grande. Tengo un código HTML con CSS que muestra un efecto cargando. Cuando ejecuto para que se ejecute todos los procesos correcto, pero el script del HTML se para…
En conclusión, es todo perfecto para mostrar una etiqueta o cualquier control estatico, rizariamos el rizo si se continuara ejecutando el script, también falta probar con un gif animado.
Prueba a ejecutar el comando que carga el fichero binario al Server en un plano de ejecución diferente al que muestra el visor HTML.
Los pasos serían:
Ejecuta en 2º plano el proceso que carga en el Server el fichero binario.
Ejecuta en 1º plano el proceso entretenedor que muestra un CSS animado en el Visor HTML.
El proceso en 1º plano inicia un bucle de espera ejecutando en cada bucle theApp.processEvents() para refrescar el Script.
El bucle terminará cuando la variable global GFIN = 1.
El proceso en 2º plano fijará a 1 la variable global GFIN = 1 (semáforo) para indicar que la carga ha terminado.
El proceso en 1º plano termina el bucle cuando GFIN = 1 y oculta el Visor HTML.
Prevé que el bucle de 1º plano pueda salir en caso de error de carga.
No sé como se comportará el Visor HTML con la ejecución de theApp.processEvents().
Pruébalo.