|
Para los loquitos de la tecla INTRO:
En Magisfor, pulsando INTRO se ejecutan muchas automatizaciones.
Puse la tecla INTRO por defecto para que el usuario no tuviera que
usar el ratón y pudiera ir más rápido, el problema es que hay usuarios
ansiosos que pulsan la tecla INTRO enloquecidamente y no la sueltan.
Esto es FATAL ya que la secuencia de teclas pulsadas se acumula y
puede haber muchos INTROS seguidos acumulados, con lo cual
Magisfor puede fallar ya que cuando está en un bucle, sin salir de
él, recibe otro INTRO y otro y otro y se vuelve a ejecutar la misma
secuencia de código varias veces.
Podía suceder por ejemplo:
-Que se guardara dos veces la misma fórmula valorada, una bien y
otra con número de registro cero. (O que se guardaran más de 2, todas
mal)
-Que se insertasen muchos registros basura en blanco en el recetario…
Y cosas peores...
Para TRATAR de evitar eso, en cada subrutina (Procedimiento) de
código que se lee, he tenido que poner una variable boleana estática de
manera que al entrar está = False y eso permite leer todo el
procedimiento, pero en siguiente línea la variable se pone = True de
manera que si se entra otra vez sin haber terminado el procedimiento,
Magisfor te saca y no permite leerlo.
Al salir despues de haber leído el código se pone = False para que la
próxima vez puedas entrar y leer todo el código
Ejemplo:
La variable la denomino 'noEntres'
Y un procedimiento de ejemplo puede ser cuando se están valorando los
productos de una fórmula:
Private sub ValorarProductos()
Static noEntres
as Boolean (declaro la variable que inicialmente tiene el valor =
False)
If noEntres
= True then exit sub (si es = True, te saca del Sub)
noEntres = True
(la activo para que no se pueda entrar hasta que no se acabe de
leer todo el código de este Sub)
Aquí se lee el código para valorar los productos....
...............
...............
noEntres = False
(al terminar y antes de salir la pongo = False para que la próxima vez
que entre pueda leer todo el código de este Sub
End Sub
Esto he tenido que hacerlo en todos los Procedimientos (Sub...) de un
recorrido (ejemplo cuando seleccionas la fórmula, la valoras y la
guardas en el recetario, se leen muchísimos Procedimientos y casi todo
se hace con un INTRO).
Funciona bien pero si pulsas la tecla INTRO muy enloquecidamente,
algunas cosas he tenido que arreglarlas de otra manera:
Por ejemplo cuando se termina de valorar se muestra una ventana con los
envases para que el usuario elija uno. En el modo para elegir un solo
envase (no múltiples), para mayor velocidad, en la ventana de envases el
botón Aceptar está seleccionado de forma predeterminada con lo cual el
usuario selecciona un envase, pulsa INTRO y se elige el envase y se sale
de esa ventana. Si hay muchos INTRO en cola, Magisfor abre la ventana de
envases, pero inmediatamente recibe un INTRO de esa cola con lo cual es
como si pulsara el botón Aceptar y sales enseguida, ni siquiera se llega
a ver la ventana de envases.
La única solución posible aquí ha sido que al abrir la ventana de
envases, quede seleccionado un envase de la lista (y no el botón
Aceptar), de esta forma los INTRO en cola no interfieren. Ahora el
usuario puede elegir su envase pero para seleccionarlo y salir debe
pulsar primero la barra de ESPACIO que coloca el cursor en el botón
Aceptar y luego basta un INTRO para seleccionar el envase y salir.
La solución ideal, sería PROHIBIR pulsar la tecla INTRO y usar el ratón
y los botones, pero como sé que vais a protestar sin parar porque
queréis ir muy rápido, dejo el INTRO como tecla por defecto para
avanzar, pero es necesario que comprendáis que no se puede pulsar
enloquecidamente porque los INTRO SE ACUMULAN.
Todo eso se acentúa si además el usuario trabaja no en el servidor, sino
desde un puesto de trabajo que lógicamente va más lento. El usuario
trata de avanzar más rápido pulsando repetidamente la tecla INTRO.
|