Saltar al contenido principal
Versión: Siguiente

ON EVENT CALL

ON EVENT CALL ( metodoEvento {; nombreProceso} )

ParámetroTipoDescripción
metodoEventoTextMétodo de evento a llamar, o Cadena vacía para detener la interceptación de eventos
nombreProcesoTextNombre del proceso

Este comando no es hilo seguro, no puede ser utilizado en código apropiativo.

Descripción

El comando ON EVENT CALL instala el método, cuyo nombre se pasa en metodoEvento, como método de gestión de eventos.

Consejo: este comando necesita un nivel de conocimiento avanzado en programación. Generalmente, no necesita utilizar ON EVENT CALL para trabajar con eventos. Cuando utiliza formularios, 4D administra los eventos y los envía a los objetos y formularios apropiados.

Consejo: comandos tales como MOUSE POSITION, Shift down, etc., para obtener información sobre eventos. Estos comandos pueden llamarse desde los métodos de objeto para obtener la información que necesita sobre un evento involucrado con un objeto. Utilizarlos le ahorra la escritura de un algoritmo basado en una estructura de tipo ON EVENT CALL.

El alcance de este comando es la sesión de trabajo actual. Por defecto, el método se ejecuta en un proceso local separado. Sólo puede tener un método de gestión de eventos a la vez. Para detener un método de gestión de eventos, llame nuevamente ON EVENT CALL y pase una cadena vacía en metodoEvento.

Como el método de gestión de eventos se ejecuta en un proceso separado, está activo constantemente, incluso si ningún método de 4D se está ejecutando. Después de la instalación, 4D llama al método de gestión de eventos cada vez que ocurre un evento. Un evento puede ser un clic con el ratón o presionar una tecla.

El parámetro opcional nomProces da nombre al proceso creado por el comando ON EVENT CALL. Si nomProces comienza por el símbolo pesos ($), comienza un proceso local, lo cual generalmente es lo que usted quiere. Si omite el parámetro nomProces, 4D crea por defecto un proceso local llamado $Event Manager.

Advertencia: sea muy cuidadoso con lo que escribe en un método de gestión de eventos. NO llame comandos que generen eventos, de lo contrario será extremadamente difícil salir de la ejecución del método de gestión de eventos. La combinación de teclas Ctrl+Mayús+Retroceso (en Windows) o Comando-Mayús-Control-Retroceso (en Mac) le permite matar el proceso en el Gestor de eventos. Podría utilizar esta técnica para recuperar un método de gestión de eventos incontrolable (por ejemplo, uno que tenga eventos que disparen bugs).

En el método de gestión de eventos, puede leer las siguientes variables sistema MouseDown, KeyCode, Modifiers, MouseX, MouseY y MouseProc. Note que estas variables son variables proceso. Su alcance es por lo tanto el proceso de gestión de eventos. Cópielas en las variables interproceso si quiere que sus valores estén disponibles en otro proceso.

  • La variable sistema MouseDown toma el valor 1 si el evento es un clic del ratón y 0 si no.
  • La variable sistema KeyCode contiene el código del carácter digitado en el teclado o el código de una tecla de función. Consulte las secciones Códigos Unicode y EXPORT TEXT que listan los códigos de caracteres utilizados por 4D, así como también la sección Códigos de teclas de función.4D ofrece constantes predefinidas para los principales y teclas de funciones. En la ventana del explorador, busque los temas de estas constantes.
  • La variable sistema Modifiers contiene el valor modificador. Indica si una tecla de modificación ha sido presionada cuando el evento ocurrió. Las siguientes teclas pueden ser detectadas:
PlataformaModificadores
WindowsMayús, Bloqueo de mayúsculas, Alt, Ctrl,
MacintoshMayús, Bloqueo de mayúsculas, Alt u Opción, Comando, Control

Las teclas modificadoras no generan un evento por su cuenta; otra tecla o el botón del ratón también deben ser presionadas. La variable Modifiers es una variable Entero largo que contiene un campo de bits. 4D ofrece constantes predefinidas que especifican la posición del bit o la máscara de bits para cada tecla de modificación. Por ejemplo, para detectar si la tecla Mayús fue presionada para el evento, puede escribir:

 If(Modifiers?? Shift key bit) //Si la tecla Mayús fue presionada  

o:

 If((Modifiers&Shift key mask)#0) //Si la tecla Mayús fue presionada  

Puede utilizar una de las siguientes constantes, dependiendo de la tecla del modificador a probar en la plataforma, que se encuentra en el tema Eventos (Modificadores):

ModificadorConstante
MayúsculaShift key bit / Shift key mask
Bloqueo de mayúsculasCaps lock key bit / Caps lock key mask
Alt (también llamado Opción en OS X)Option key bit / Option key mask
Ctrl en WindowsCommand key bit / Command key mask
Ctrl en OS XControl key bit / Control key mask
Comando en OS XCommand key bit / Command key mask
Clic derechoControl key bit / Control key mask
  • Las variables sistema MouseX y MouseY contienen las posiciones horizontal y vertical del clic del ratón, expresadas en el sistema de coordenadas locales de la ventana donde el clic se produjo. La esquina superior izquierda de la ventana es la posición 0,0. Estas variables son significativas sólo cuando hay un clic del ratón.
  • La variable sistema MouseProc contiene el número de referencia del proceso en el cual ocurrió el evento (clic del ratón).

Importante: las variables sistema MouseDown, KeyCode, Modifiers, MouseX, MouseY y MouseProc sólo contienen valores significativos en un método de gestión de eventos instalado con ON EVENT CALL.

Ejemplo

Este ejemplo cancela la impresión si el usuario presiona las teclas Ctrl+punto. Primero, el método de gestión de eventos se instala. Luego aparece un mensaje, anunciando que el usuario puede cancelar la impresión. Si la variable interproceso vbWeStop es igual a True en el método de gestión de eventos, una caja de diálogo de alerta aparece para mostrar al usuario el número de registros que han sido impresos. Luego el método de gestión de eventos se desinstala:

 PAGE SETUP
 If(OK=1)
    ◊vbWeStop:=False
    ON EVENT CALL("GESTIÓN DE EVENTOS") // Instala el método de gestión de eventos
    ALL RECORDS([Personas])
    MESSAGE("Para interrumpir la impresión presione Ctrl+Punto.")
    $vlNbRegistros:=Records in selection([People])
    For($vlRegistro;1;$vlNbRegistros)
       If(◊vbWeStop)
          ALERT("Printing cancelled at record "+String($vlRegistro)+" of "+String($vlNbRegistros))
          $vlRegistro:=$vlNbRegistros+1
       Else
          Print form([Personas];"Informe especial")
       End if
    End for
    PAGE BREAK
    ON EVENT CALL("") // Desinstala el método de gestión de eventos
 End if

Si se ha presionado la combinación Ctrl+punto, el método de gestión de eventos da a vbWeStop el valor True:

  // Método de proyecto GESTIÓN DE EVENTOS
 If((Modifiers?? Command key bit)&(KeyCode=Period))
    CONFIRM("¿Está seguro?")
    If(OK=1)
       ◊vbWeStop:=True
       FILTER EVENT // NO olvide este llamado; de lo contrario 4D también obtendrá este evento
    End if
 End if

Note que este ejemplo utiliza ON EVENT CALL porque realiza un informe especial de impresión utilizando los comandos PAGE SETUP, Print form y PAGE BREAK en una estructura de tipo bucle For...End for.
Si imprime un informe utilizando PRINT SELECTION, NO necesita administrar los eventos que permiten al usuario interrumpir la impresión; PRINT SELECTION hace esto por usted.

Ver también

FILTER EVENT
MOUSE POSITION
Method called on event
Shift down