Form event

4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 11.2 (Modificado)


Form event Numérico

ParámetroTipoDescripción
Este comando no necesita parámetros
ResultadoNuméricoNúmero del evento de formulario

Descripción

Form event devuelve un valor numérico que identifica el tipo de evento de formulario que acaba de ocurrir. Generalmente, Form event se utiliza en un método de formulario o en un método de objeto.

4D ofrece constantes predefinidas (ubicadas en el tema "Eventos de formulario") para comparar los valores devueltos por el comando Form event.

Ciertos eventos son genéricos (generados por todo tipo de objeto) y otros son específicos a un tipo de objeto particular.

Eventos genéricos

Los siguientes eventos pueden ser generados por todo formulario u objeto:

ConstanteValorDescripción
On Load1El formulario se visualiza o se imprime
On Unload24El formulario se cierra y se descarga
On Validate3La entrada de datos al registro ha sido validada
On Clicked4Ocurrió un clic sobre un objeto
On Double Clicked13Ocurrió un doble clic sobre un objeto
On Before Keystroke17Un carácter va a ser introducido en el objeto que tiene el foco
Get edited text devuelve el texto del objeto sin este carácter
On After Keystroke28Un carácter acaba de ser introducido en el objeto que tiene el foco
Get edited text devuelve el texto del objeto incluyendo este carácter
On After Edit45El contenido del objeto editable que tiene el foco acaba de ser
modificado
On Getting Focus15Un objeto de formulario toma el foco
On Losing Focus14Un objeto de formulario pierde el foco
On Activate11La ventana del formulario pasa al primer plano
On Deactivate12La ventana del formulario pasa a un segundo plano
On Outside Call10El formulario recibe una llamada del comando CALL PROCESS
On Drop16Se han soltado datos en un objeto
On Drag Over21Los datos pueden soltarse en un objeto
On Begin Drag Over46Un objeto está siendo arrastrado
On Mouse Enter35El cursor del ratón entra en el área gráfica de un objeto
On Mouse Move37El cursor del ratón se mueve (por lo menos un pixel) en el área
gráfica de un objeto
On Mouse Leave36El cursor del ratón sale del área gráfica de un objeto
On Menu Selected18Un comando de menú ha sido seleccionado
On Data Change20Los datos de un objeto han sido modificados
On Plug in Area19Un objeto externo solicita que su método de objeto se ejecute
On Header5El área de encabezado del formulario va a imprimirse o visualizarse
On Printing Detail23El cuerpo del formulario va a imprimirse
On Printing Break6Un área de ruptura del formulario va a imprimirse
On Printing Footer7El área de pie de página del formulario va a imprimirse
On Close Box22Se ha hecho clic en la caja de cierre de la ventana
On Display Detail8Se va a mostrar un registro en una lista
On Open Detail25Se hace doble clic en un registro y pasa al formulario de entrada
On Close Detail26El formulario de entrada se cierra y vuelve al formulario de salida
On Selection Change31 List box: la selección actual de filas o columnas se modifica
Registros en lista: el registro actual o la selección actual de filas
se modifica en un formulario listado o en un subformulario
Lista jerárquica: la selección en la lista se modifica después de un
clic o de presionar una tecla
On Load Record40Durante la entrada en lista, un registro se carga en modificación
(el usuario hace clic en una línea del registro y el campo pasa a
modo edición)
On Timer27El número de tics definido por el comando SET TIMER ha pasado
On Resize29La ventana del formulario es redimensionada

List box

Los siguientes eventos se generan únicamente para los objetos de tipo List box:

ConstanteValorDescripción
On Before Data Entry41Una celda de list box está a punto de pasar a modo edición
On Column Moved32El usuario mueve una columna de list box vía arrastrar y soltar
On Row Moved34El usuario mueve una fila de list box vía arrastrar y soltar
On Column Resize33El ancho de una columna de list box se modifica
On Header Click42Ocurre un clic en el encabezado de una columna de list box
On After Sort30Se ha efectuado un ordenamiento estándar en una columna de list box

Botones 3D

Los siguientes eventos sólo son generados por botones de tipo 3D:

ConstanteValorDescripción
On Long Click39Un botón 3D recibe un clic y el botón del ratón permanece
presionado por un cierto periodo de tiempo
On Arrow Click38El área "flecha" de un botón 3D recibe un clic

Listas jerárquicas

Los siguientes eventos sólo son generados por listas jerárquicas:

ConstanteValorDescripción
On Expand43Un elemento de lista jerárquica ha sido desplegado utilizando
haciendo clic o presionando una tecla
On Collapse44Un elemento de la lista jerárquica ha sido contraído haciendo clic o
presionando una tecla

Nota: Los eventos específicos de formularios de salida no pueden utilizarse en formularios proyecto. Estos son: On Display Detail, On Open Detail, On Close Detail, On Load Record, On Header, On Printing Detail, On Printing Break, On Printing Footer.

Eventos y métodos


Cuando ocurre un evento de formulario, 4D efectúa las siguientes acciones:

Primero, examina los objetos del formulario y llama al método de objeto para todos los objetos (involucrados en el evento) cuya propiedad de evento de objeto correspondiente ha sido seleccionada.

Segundo, llama al método de formulario si la propiedad de evento de formulario correspondiente ha sido seleccionada.

No asuma que los métodos de objeto, si los hay, serán llamados en un orden particular. La regla es que los métodos de objeto siempre son llamados antes que los métodos de formulario. Si un objeto es un subformulario, se llama primero a los métodos de objeto del formulario de salida del subformulario, luego el método de formulario del formulario de salida. 4D luego continúa llamando a los métodos del formulario padre. En otras palabras, cuando un objeto está en un subformulario, 4D utiliza la misma regla que para los métodos de objeto y formulario en subformularios.

Excepto para los eventos On Load y On Unload, si la propiedad de evento de formulario no está seleccionada para un evento dado, esto no evita las llamadas a los métodos de objeto para los objetos cuya propiedad de evento está seleccionada. Es decir, la activación o desactivación de un evento a nivel del formulario no tiene efecto en las propiedades del evento de los objetos.

El número de objetos involucrados en un evento depende de la naturaleza del evento:

Evento On Load - Los métodos de objeto de todos los objetos del formulario (de todas las páginas) que tengan seleccionada la propiedad de evento On Load serán llamados. Luego, si la propiedad de evento de formulario On Load está seleccionada, el método de formulario será llamado.

Eventos On Activate o On Resize - Ningún método de objeto será llamado, porque este evento aplica al formulario como un todo y no como un objeto en particular. Por lo tanto, si el evento de formulario On Activate está seleccionado, sólo se llamará al método de formulario.

Evento On Timer - Este evento es generado únicamente si el método de formulario contiene una llamada previa al comando SET TIMER. Si la propiedad de evento de formulario On Timer está seleccionada, sólo el método de formulario recibirá el evento, no se llamará al método de formulario.

Evento On Drag Over - Sólo el método del objeto soltable involucrado en el evento será llamado (si la propiedad de evento "Soltable" está seleccionada para el objeto. El método de formulario no será llamado.

Por el contrario, para el evento On Begin Drag over, el método del objeto o el método del formulario del objeto arrastrado será llamado (Si la propiedad de evento "Arrastrable" está seleccionada para el objeto.

Advertencia: A diferencia de otros eventos, durante un evento On Begin Drag over o On Drag over el método llamado se ejecuta en el contexto del proceso de arrastrar y soltar del objeto fuente, no en el del proceso de arrastrar y soltar el objeto de destino. Para mayor información, consulte la sección Arrastrar y soltar.

Si los eventos On Mouse Enter, On Mouse Move y On Mouse Leave han sido seleccionados para el formulario, son generados para cada objeto del formulario. Si están seleccionados para un objeto, son generados sólo para el objeto. En caso de superposición de objetos, el evento se genera por el primer objeto capaz de administrarlo que se encuentre del nivel superior al inferior. Los objetos que se hicieron invisibles utilizando el comando SET VISIBLE no generan estos eventos. Durante la entrada de datos, otros objetos pueden recibir este tipo de eventos dependiendo de la posición del ratón.

Registros en lista: La secuencia de llamadas a métodos y eventos de formularios en formularios listados visualizados a través de MODIFY SELECTION / DISPLAY SELECTION y los subformularios es la siguiente:

   Para cada objeto del área de encabezado:
      Método de objeto con evento On Header
   Método de formulario con evento On Header
   Para cada registro:
      Para cada objeto en el área de detalle:
         Método de objeto con evento On Display Detail
      Método de formulario con evento On Display Detail

Llamar un comando 4D que muestre una caja de diálogo desde los eventos On Display Detail y On Header no es permitido y provoca un error de sintaxis.

Más particularmente, los comandos relacionados son: ALERT, DIALOG, CONFIRM, Request, ADD RECORD, MODIFY RECORD, DISPLAY SELECTION y MODIFY SELECTION.

La siguiente tabla resume cómo se llaman los métodos de formulario y objetos para cada tipo de evento:

EventoMétodos Método Qué
de objetode formularioobjetos
On LoadTodos
On UnloadTodos
On ValidateTodos
On ClickedSí (si cliqueable) (*)Sólo el objeto implicado
On Double ClickedSí (si cliqueable) (*)Sólo el objeto implicado
On Before KeystrokeSí (si editable) (*)Sólo el objeto implicado
On After KeystrokeSí (si editable) (*)Sólo el objeto implicado
On After EditSí (si editable) (*)Sólo el objeto implicado
On Getting FocusSí (si tabulable) (*)Sólo el objeto implicado
On Losing FocusSí (si tabulable) (*)Sólo el objeto implicado
On ActivateNuncaNinguno
On DeactivateNuncaNinguno
On Outside CallNuncaNinguno
On Begin drag overSí (si arrastrable) (**)Sólo el objeto implicado
On DropSí (si soltable) (**)Sólo el objeto implicado
On Drag OverSí (si soltable) (**)NuncaSólo el objeto implicado
On Mouse EnterTodos
On Mouse MoveTodos
On Mouse LeaveTodos
On Menu SelectedNuncaNinguno
On Data ChangeSí (si modificable) (*)Sólo el objeto implicado
On Plug in AreaSólo el objeto implicado
On HeaderTodos
On Printing DetailTodos
On Printing BreakTodos
On Printing FooterTodos
On Close BoxNuncaNinguno
On Display DetailTodos
On Open DetailNuncaNinguno
On Close DetailNuncaNinguno
On ResizeNuncaNinguno
On Selection ChangeSí (***)Sólo el objeto implicado
On Load RecordNuncaNinguno
On TimerNuncaNinguno
On Before Data EntrySí (List box)NuncaSólo el objeto implicado
On Column MovedSí (List box)NuncaSólo el objeto implicado
On Row MovedSí (List box)NuncaSólo el objeto implicado
On Column ResizeSí (List box)NuncaSólo el objeto implicado
On Header ClickSí (List box)NuncaSólo el objeto implicado
On After SortSí (List box)NuncaSólo el objeto implicado
On Long ClickSí (Botón 3D)Sólo el objeto implicado
On Arrow ClickSí (Botón 3D)Sólo el objeto implicado
On ExpandSí (Lista jerárq.)NuncaSólo el objeto implicado
On CollapseSí (Lista jerárq.)NuncaSólo el objeto implicado

(*) Para mayor información, ver la sección "Eventos, objetos y propiedades" a continuación.

(**) Consulte la sección "Arrastrar y soltar" para mayor información.

(***) Sólo los objetos de tipo list box, lista jerárquica y subformulario soportan este evento.

IMPORTANTE: Siempre tenga en cuenta que, para cualquier evento, el método de un formulario o de un objeto se llama si el evento correspondiente es seleccionado para el formulario u objeto. El beneficio de desactivar eventos en el entorno Diseño (utilizando la Lista de propiedades del editor de formularios) es que usted puede reducir de manera importante el número de llamadas a métodos y por lo tanto optimizar de manera significativa la velocidad de ejecución de sus formularios.

Advertencia: Los eventos On Load y On Unload son generados por objetos si están activados para el objeto y el formulario al cual pertenece el objeto. Si los eventos están activados para el objeto únicamente, no ocurrirán; estos dos eventos también deben ser activados a nivel del formulario.

Eventos, objetos y propiedades


Un método de objeto es llamado si el evento puede realmente ocurrir para el objeto, dependiendo de su naturaleza y propiedades. La siguiente sección detalla los eventos que usted utilizará generalmente para manejar los diferentes tipos de objetos.

Recuerde que la Lista de propiedades del editor de formularios sólo muestra los eventos compatibles con el objeto seleccionado o el formulario.

Objetos cliqueables

Los objetos cliqueables son administrables principalmente con el ratón. Son los siguientes:

Variables o campos editables de tipo Booleano

Botones, botones por defecto, botones de opción, casillas de selección, rejillas de botones

Botones 3D, Botones de opción 3D, Casillas de selección 3D

Menús desplegables, menús jerárquicos desplegables, menús imagen

Listas desplegables, menús

Áreas de desplazamiento, listas jerárquicas, list boxes

Botones invisibles, botones inversos, botones opción imagen

Termómetros, reglas, dials (también conocidos como objetos deslizables)

Pestañas

Separadores.

Cuando el evento On Clicked u On Double Clicked se selecciona para uno de estos objetos, usted puede detectar y administrar los clics en el objeto, utilizando el comando Form event que devuelve On Clicked u On Double Clicked, dependiendo del caso.

Si ambos eventos están seleccionados para un objeto, los eventos On Clicked y On Double Clicked serán generados cuando el usuario haga doble clic en el objeto.

Para todos estos objetos, el evento On Clicked ocurre una vez se libera el botón del ratón. Sin embargo, hay varias excepciones:

Botones invisibles - El evento On Clicked ocurre tan pronto como se hace clic y no espera a que se libere el botón del mouse.

Objetos deslizables (termómetros, reglas, y dials) - Si el formato de salida indica que el método de objeto debe llamarse mientras usted desliza el control, el evento On Clicked ocurre tan pronto como se hace clic.

Nota: Algunos de estos objetos pueden activarse con el teclado. Por ejemplo, una vez que una casilla de selección obtiene el foco, puede seleccionarse utilizando la barra espaciadora. En tal caso, se genera un evento On Clicked.

Advertencia: Los combo boxes no son considerados objetos cliqueables. Un combo box debe ser tratado como un área de texto editable cuya lista desplegable asociada ofrece valores por defecto. Por lo tanto, usted puede manejar entrada de datos en un combo box con la ayuda de los eventos On Before Keystroke, On After Keystroke y On Data Change.

Objetos editables por teclado

Los objetos editables por teclado son objetos en los cuales usted introduce datos utilizando el teclado y para los cuales puede filtrar los datos de entrada al menor nivel detectando los eventos On After Edit, On Before Keystroke y On After Keystroke. Puede aprovechar estos eventos utilizando el comando Get edited text.

Los objetos y tipos de datos editables por teclado incluyen:

Todos los campos editables de tipo alfa, texto, fecha, hora, numérico u (On After Edit únicamente) imagen

Todas las variables editables de tipo alfa, texto, fecha, hora, numérico u (On After Edit only) imagen

Combo boxes

List boxes.

Nota: Aunque son objetos "editables", las listas jerárquicas no manejan los eventos de formulario On After Edit, On Before Keystroke y On After Keystroke (Ver también el párrafo "Listas jerárquicas" a continuación).

On Before Keystroke y On After Keystroke

Nota: A partir de la versión 2004.2 de 4D, el evento On After Keystroke puede generalmente ser reemplazado por el evento On After Edit (ver a continuación).

Una vez los eventos On Before Keystroke y On After Keystroke hayan sido seleccionados para un objeto, puede detectar y administrar las pulsaciones de teclas en el objeto, utilizando el comando Form event que devolverá On Before Keystroke y luego On After Keystroke (para mayor información, consulte la descripción del comando Get edited text). Estos eventos también son activados por comandos de lenguaje que simulan la acción del usuario, tal como POST KEY.

Recuerde que las modificaciones del usuario que no se llevan a cabo utilizando el teclado (pegar, arrastrar-soltar, etc.) no se tienen en cuenta. Para procesar estos eventos, debe utilizar On After Edit.

Nota: Los eventos On Before Keystroke y On After Keystroke no son generados durante la utilización de un método de entrada. Un método de entrada (o IME, Input Method Editor) es un programa o un componente sistema que puede utilizarse para introducir caracteres complejos o símbolos (por ejemplo, japoneses o chinos) utilizando un teclado occidental.

On After Edit

Cuando se utiliza, este evento se genera después de cada cambio realizado al contenido de un objeto editable, sin importar la acción que originó el cambio, es decir:

- Las acciones de edición estándar que modifican el contenido tales como pegar, cortar, borrar o cancelar;

- Soltar un valor (acción similar a pegar);

- Toda entrada de teclado realizada por el usuario; en este caso, el evento On After Edit se genera después de los eventos On Before Keystroke y On After Keystroke, si son utilizados.

- Toda modificación realizada utilizando un comando de lenguaje que estimula una acción de usuario (por ejemplo POST KEY).

Atención, las siguientes acciones NO activan este evento:

- Las acciones de edición que no modifican el contenido del área, como copiar o seleccionar todo;

- Arrastrar un valor (acción similar a copiar);

- Las modificaciones a los contenidos por programación, excepto para los comandos que simulan una acción de usuario.

Este evento puede utilizarse para controlar acciones de usuario con el fin de prevenir que peguen un texto muy largo, bloquear ciertos caracteres o evitar que se corte un campo de contraseña.

Objetos modificables

Los objetos modificables tienen una fuente de datos cuyos valores pueden modificarse utilizando el ratón o el teclado; no son considerados verdaderamente como controles de interfaz de usuario manejados a través del evento On Clicked. Estos objetos son los siguientes:

Todos los campos editables (excepto subtablas y BLOBs)

Todas las variables editables (excepto BLOBs, punteros, y arrays)

Combo boxes

Objetos externos (para los cuales la entrada de datos es aceptada por el plug-in)

Listas jerárquicas

List boxes.

Estos objetos reciben eventos On Data Change. Cuando el evento On Data Change está seleccionado para uno de estos objetos, usted puede detectar y administrar el cambio de los valores de la fuente de datos, utilizando el comando Form event que devolverá On Data Change. El evento es generado tan pronto como la variable asociada con el objeto sea actualizada internamente por 4D (por lo general, cuando el área de entrada del objeto pierde el foco).

Objetos tabulables

Los objetos tabulables obtienen el foco cuando utiliza la tecla Tab para alcanzarlos y/o cuando hace clic en ellos. El objeto que tiene el foco recibe los caracteres (digitados en el teclado) que no son modificadores de un comando de menú o de un objeto tal como un botón.

Todos los objetos son tabulables, EXCEPTO los siguientes:

Variables o campos no editables

Rejillas de botones

Botones 3D, botones opción 3D, casillas de selección 3D

Menús desplegables, menús jerárquicos desplegables

Menús/listas desplegables

Menús imagen

Áreas de desplazamiento

Botones invisibles, botones inversos, botones opción imágenes

Gráficos

Objetos externos (para los cuales la entrada de datos es aceptada por el plug-in 4D)

Pestañas

Separadores.

Cuando los eventos On Getting Focus y/o On losing Focus son seleccionados para un objeto tabulable, usted puede detectar y administrar el cambio de foco, utilizando el comando Form event que devolverá On Getting Focus u On losing Focus, dependiendo del caso.

Botones 3D

Los botones 3D le permiten establecer interfaces gráficas avanzadas (para una descripción de los botones 3D, consulte el Manual de Diseño). Además de los eventos genéricos, dos eventos específicos pueden utilizarse para administrar estos botones:

On Long Click: este evento se genera cuando un botón 3D recibe un clic y el botón del ratón se mantiene presionado por un cierto periodo de tiempo. En teoría, el periodo de tiempo para el cual este evento se genera es igual a la longitud máxima de tiempo que separa un doble clic, como está definido en las preferencias del sistema.

Este evento puede ser generado por todos los estilos de botones 3D, botones de opción 3D y casillas de selección 3D, con excepción de los botones 3D de "antigua generación" (estilo offset de fondo) y las áreas de flechas de botones 3D con menús desplegables (ver a continuación).

Este evento se utiliza generalmente para mostrar menús desplegables en caso de clics largos en los botones. El evento On Clicked, si está seleccionado, se genera si el usuario libera el botón del ratón antes del tiempo límite de "clic largo".

On Arrow Click: Algunos estilos de botones 3D pueden estar asociados a un menú desplegable y mostrar una flecha. Hacer clic en esta flecha hace que se despliegue una caja de selección que ofrece un conjunto de acciones adicionales en relación con la acción principal del botón.

4D le permite administrar este tipo de botón utilizando el evento On Arrow Click. Este evento se genera cuando el usuario hace clic en la "flecha" (tan pronto como el botón del ratón sea presionado):

- Si el menú desplegable es de tipo "separado," el evento sólo se genera cuando un clic ocurre en la parte del botón con la flecha.

- Si el menú desplegable es de tipo "enlazado," el evento se genera cuando ocurre un clic en cualquier parte del botón. Por favor tenga en cuenta que el evento On Long Click no puede generarse con este tipo de botón.

Los estilos de botones 3D, botones de opción 3D y casillas de selección 3D que aceptan la propiedad "Con menú desplegable" son: Ninguno, Botón de barra, Bevel, Bevel redondeado y Office XP.

List boxes

Siete eventos de formulario pueden utilizarse para administrar las diferentes características específicas de los list boxes:

On Before Data Entry: Este evento se genera justo antes de que una celda de list box sea editada (antes de que el cursor de entrada aparezca). Este evento permite al desarrollador, por ejemplo, mostrar un texto diferente dependiendo de que el usuario esté en modo visualización o en modo edición.

On Selection Change: Este evento se genera cada vez que la selección actual de filas o de columnas del list box se modifica. Este evento también se genera para las listas de registros y listas jerárquicas.

On Column Moved: Este evento se genera cuando una columna del list box es movida por el usuario utilizando arrastrar y soltar. No se genera si la columna se arrastra y suelta en su ubicación inicial. El comando MOVED LISTBOX COLUMN NUMBER devuelve la nueva posición de la columna.

On Row Moved: Este evento se genera cuando una fila del list box es movida por el usuario utilizando arrastrar y soltar. No se genera si la fila es arrastrada y soltada en su ubicación inicial.

On Column Resize: Este evento se genera cuando el largo de una columna del list box se modifica (utilizando el ratón o por programación utilizando el comando SET LISTBOX COLUMN WIDTH).

On Header Click: Este evento se genera cuando ocurre un clic en el encabezado de una columna en el list box. En este caso, el comando Self le permite conocer el encabezado de la columna en la que se hizo clic. El evento On Clicked se genera cuando un clic derecho (Windows) o Ctrl+clic (Mac OS) ocurre en una columna o en un encabezado de columna.

Si la propiedad Ordenable fue seleccionada para el list box, usted puede decidir si permite o no una ordenación estándar de la columna pasando el valor 0 ó -1 en la variable $0:

- Si $0 es igual a 0, se efectúa la ordenación estándar.

- Si $0 es igual a -1, no se efectúa la ordenación estándar y el encabezado no muestra la flecha de ordenación. El desarrollador puede aún generar una ordenación de las columnas basada en criterios de ordenación personalizados utilizando los comandos de gestión de arrays de 4D.

Si la propiedad Ordenable no está seleccionada para el list box, la variable $0 no se utiliza.

On After Sort: Este evento se genera justo después de que se efectúe una ordenación estándar (sin embargo, no se genera si $0 devuelve -1 en el evento On Header Click). Este mecanismo es útil para conservar los sentidos de las últimas ordenaciones efectuadas por el usuario. En este evento, el comando Self devuelve un puntero a la variable de la columna que fue ordenada.

Listas jerárquicas

Además de los eventos genéricos, tres eventos específicos pueden utilizarse para administrar las acciones que los usuarios realizan sobre listas jerárquicas:

On Selection Change: Este evento se genera cada vez que la selección en la lista jerárquica se modifica después de un clic o de que se presione una tecla.

Este evento también es generado en los objetos list box y listas de registros.

On Expand: Este evento se genera cada vez que un elemento de la lista jerárquica se despliega con un clic o al presionar una tecla.

On Collapse: Este evento se genera cada vez que un elemento de la lista jerárquica se contrae con un clic o al presionar una tecla.

Estos eventos no son mutuamente exclusivos. Pueden generarse uno después del otro para una lista jerárquica:

- En respuesta a presionar una tecla (en orden):

EventoContexto
On Data ChangeUn elemento estaba en edición
On Expand/On CollapseApertura/cierre de una sublista utilizando las teclas de flechas -> o &;-
On Selection ChangeSelección de un nuevo elemento
On ClickedActivación de la lista utilizando el teclado

- En respuesta a un clic (en orden):

EventoContexto
On Data ChangeUn elemento estaba en edición
On Expand/On CollapseApertura/cierre de una sublista utilizando los iconos de despliegue/contracción
o
Doble-clic en una sublista no editable
On Selection ChangeSelección de un nuevo elemento
On Clicked / On Double ClickedActivación de la lista por un clic o un doble clic

Ejemplos

En todos los ejemplos siguientes, se asume que las propiedades de eventos de formularios y objetos han sido seleccionadas de manera apropiada.

1. Este ejemplo ordena una selección de subregistros para la subtabla [Padres]Hijos antes que un formulario de la tabla [Padres] sea visualizado en pantalla:

      ` Método de un formulario para la tabla [Padres]
   Case of
      : (Form event=On Load)
         ORDER SUBRECORDS BY([Padres]
Hijos
;[Padres]Nombre'Hijos;>)
         ` ...
   End case

2. Este ejemplo muestra el evento On Validate utilizado para asignar automáticamente (a un campo) la fecha cuando el registro es modificado:

      ` Método de un formulario
   Case of
         ` ...
      : (Form event=On Validate)
         [unaTabla]Fecha de modificación:=Current date
   End case

3. En este ejemplo, la gestión completa de un menú desplegable, (inicialización, clics del usuario, y liberación de objeto) está encapsulada en el método de objeto:

      ` Método de objeto del menú desplegable asTalla
   Case of
      : (Form event=On Load)
         ARRAY STRING(31;asTalla;3)
         asTalla{1}:="pequeña"
         asTalla{1}:="mediana"
         asTalla{1}:="grande"
      : (Form event=On Clicked)
         If (asTalla#0)
            ALERT("Escogió una hamburguesa "+asTalla{asTalla}")
         End if
      : (Form event=On Unload)
         CLEAR VARIABLE(asTalla)
   End case

4. Este ejemplo muestra cómo aceptar y administrar una operación de arrastrar y soltar para un objeto de campo que sólo acepta valores de imágenes, en un método de objeto,

      ` Método de objeto de campo Imagen [unaTabla]unaImagen
   Case of
      : (Form event=On Drag Over)
            ` Ha comenzado una operación arrastrar y soltar y el ratón está sobre el campo
            ` Obtener la información sobre el objeto fuente
         DRAG AND DROP PROPERTIES ($vpObjetoOrigen;$vlElementoOrigen;$lProcesoOrigen)
            ` Note que no necesitamos probar el número de proceso fuente
            ` para el método de objeto ejecutado ya que es el mismo proceso
         $vlTipoDatos:=Type ($vpObjetoOrigen->)
            ` ¿Los datos fuente son una imagen (campo, variable o array)?
         If (($vlTipoDatos=Is Picture) | ($vlTipoDatos=Picture Array))
               ` Si es así, acepte el arrastrar.
               ` Note que el botón del ratón aún está presionado, el único efecto mientras
               ` acepta el arrastrar es permitir a 4D resaltar el objeto de manera que el usuario
               ` sepa que los datos fuente pueden ser soltados en este objeto.
            $0:=0
         Else
               ` De lo contrario, rechace el arrastrar
            $0:=-1
               ` En este caso, el objeto no se resalta
         End if
      : (Form event=On Drop)
            ` Los datos fuente han sido soltados sobre el objeto, por lo tanto necesitamos copiarlos en el objeto
            ` Obtener la información sobre el objeto fuente
         DRAG AND DROP PROPERTIES ($vpObjetoOrigen;$vlElementoOrigen;$lProcesoOrigen)
         $vlTipoDatos:=Type ($vpObjetoOrigen->)   
         Case of
               ` El objeto fuente es un campo o una variable tipo imagen
            : ($vlTipoDatos=Is Picture)
                  ` El objeto fuente es del mismo proceso (de la misma ventana y formulario)?
               If ($lProcesoOrigen=Current process)
                     ` Si es así, copiar el valor fuente
                  [aTabla]aImagen:=$vpObjetoOrigen->
               Else
                     ` Si no, ¿es el objeto fuente una variable?
                  If (Is a variable ($vpObjetoOrigen))
                         ` Si es así, obtener el valor del proceso fuente
                     GET PROCESS VARIABLE ($lProcesoOrigen;$vpObjetoOrigen->;$vgImagenArrastrada)
                     [aTabla]aImagen:=$vgImagenArrastrada
                  Else
                     ` Si no, utilice CALL PROCESS para obtener el valor del campo del proceso fuente
                  End if
               End if
               ` El objeto fuente es un array de imágenes
            : ($vlTipoDatos=Picture Array)
                  ` ¿Está el objeto fuente en el mismo proceso (en la misma ventana y formulario)?
               If ($lProcesoOrigen=Current process)
                     ` Si es así, copiar el valor fuente
                  [aTabla]aImagen:=$vpObjetoOrigen->{$vlElementoOrigen}
               Else
                     ` Sino, obtener el valor del proceso fuente
                  GET PROCESS VARIABLE ($lProcesoOrigen;$vpObjetoOrigen;
                        ->{$vlElementoOrigen};$vgImagenArrastrada)
                  [aTabla]aImagen:=$vgImagenArrastrada
               End if
         End case
   End case

Nota: Para más ejemplos sobre gestión de los eventos On Drag Over y On Drop, consulte los ejemplos del comando DRAG AND DROP PROPERTIES.

5. Este ejemplo es una plantilla para un método de formulario. Muestra cada uno de los posibles eventos que pueden ocurrir cuando un informe utiliza un formulario como formulario de salida:

      ` Método de un formulario utilizado como formulario de salida de un informe
   $vpFormTabla:=Current form table
   Case of
         ` ...
      : (Form event=On Header)
            ` Un área de encabezado está apunto de imprimirse
         Case of
            : (Before selection($vpFormTabla->))
               ` El código para la primera ruptura de encabezado debe estar aquí
            : (Level = 1)
               ` El código para la ruptura de encabezado de nivel 1 debe estar aquí
            : (Level = 2)
               `  El código para la ruptura de encabezado de nivel 2 debe estar aquí
               ` ...
         End case
      : (Form event=On Printing Detail)
            ` Se va a imprimir un registro
            ` El código para cada registro debe ir aquí
      : (Form event=On Printing Break)
            ` Un área de ruptura está a punto de imprimirse
         Case of
            : (Level = 0)
               ` El código para la ruptura 0 debe estar aquí
            : (Level = 1)
               ` El código para la ruptura 1 debe estar aquí
               ` ...
         End case
      : (Form event=On Printing Footer)
         If(End selection($vpFormTabla->))
            ` El código para el último pie de página va aquí
         Else
            ` El código para el pie de página debe ir aquí
         End if      
   End case

6. Este ejemplo muestra la plantilla de un método de formulario que administra los eventos que pueden ocurrir en un formulario mostrado utilizando los comandos DISPLAY SELECTION o MODIFY SELECTION. Por propósitos didácticos, muestra la naturaleza del evento en la barra de título de la ventana del formulario.

      ` Un método de formulario
   Case of
      : (Form event=On Load)
         $vsEvento:="El formulario va a ser visualizado"
      : (Form event=On Unload)
         $vsEvento:="El formulario de salida ha sido cerrado y va a desaparecer de la pantalla"
      : (Form event=On Display Detail)
         $vsEvento:="Mostrando el registro #"+String(Selected record number([LaTabla]))
      : (Form event=On Menu Selected)
         $vsEvento:="Un comando de menú ha sido seleccionado"
      : (Form event=On Header")
         $vsEvento:="El área de encabezado está a punto de ser dibujada"
      : (Form event=On Clicked")
         $vsEvento:="Se ha hecho clic en un registro"
      : (Form event=On Double Clicked")
         $vsEvento:="Se ha hecho doble clic en un registro"
      : (Form event=On Open Detail)
         $vsEvento:="Se hizo doble clic en el registro #"+String(Selected record number([LaTabla]))
      : (Form event=On Close Detail)
         $vsEvento:="Regreso al formulario de salida"
      : (Form event=On Activate)
         $vsEvento:="La ventana de formulario pasa al primer plano"
      : (Form event=On Deactivate)
         $vsEvento:="La ventana del formulario no es más la ventana del primer plano"
      : (Form event=On Menu Selected)
         $vsEvento:="Se ha seleccionado un elemento del menú"
      : (Form event=On Outside call)
         $vsEvento:="Se ha recibido una llamada de exterior"
      Else
         $vsEvento:="¿Qué pasa? El evento #"+String(Form event)
   End case
   SET WINDOW TITLE ($vsEvento)

7. Para los ejemplos sobre gestión de los eventos On Before Keystroke y On After Keystroke, ver los ejemplos de los comandos Get edited text, Keystroke y FILTER KEYSTROKE.

8. Este ejemplo muestra cómo tratar de la misma forma los clics y doble clic en un área de desplazamiento:

      ` Método de objeto para el área de desplazamiento asOpciones
   Case of
      : (Form event=On Load)
         ARRAY STRING (...;asOpciones;...)
            ` ...
         asOpciones:=0
      : ((Form event=On Clicked) | (Form event=On Double Clicked))
         If (asOpciones#0)
               ` Se ha hecho clic en un elemento, hacer algo aquí
               ` ...
         End if
            ` ...
   End case

9. Este ejemplo muestra cómo tratar los clics y doble clics utilizando una respuesta diferente. Note el uso del elemento cero para conservar el valor del elemento seleccionado:

      ` Método de objeto para el área de desplazamiento asChoices
   Case of
      : (Form event=On Load)
         ARRAY STRING (...;asOpciones;...)
            ` ...
         asOpciones:=0
         asOpciones{0}:="0"
      : (Form event=On Clicked)
         If (asOpciones#0)
            If (asOpciones#Num(asOpciones))
                  ` Se ha hecho clic en un nuevo elemento, hacer algo aquí
                  ` ...
                  ` Guardar el nuevo elemento seleccionado para la próxima vez
               asOpciones{0}:=String (asOpciones)
            End if
         Else
            asOpciones:=Num(asOpciones{0})
         End if
      : (Form event=On Double Clicked)
         If (asOpciones#0)
               ` Se ha hecho doble clic sobre un elemento, hacer algo diferente aquí
         End if
            ` ...
   End case

10. Este ejemplo muestra cómo mantener un área de texto a partir de un método desde un método de formulario, utilizando los eventos On Getting Focus y On losing Focus:

      `Método de formulario [Contactos];"Entrada"
   Case of
      : (Form event=On Load)
         C_TEXT(vtAreaEstado)
         vtAreaEstado:=""
      : (Form event=On Getting Focus)
         RESOLVE POINTER (Focus object;$vsNombreVar;$vlNumTabla;$vlNumCampo)
         If (($vlNumTabla#0) & ($vlNumCampo#0))
            Case of
               : ($vlNumCampo=1) ` Campo nombre
                  vtAreaEstado:="Introduzca el nombre del contacto; se pasará automáticamente a mayúsculas"
                     ` ...
               : ($vlNumCampo=10) ` Campo código postal
                  vtAreaEstado:="Introduzca un código postal; será verificado y validado automáticamente"
                     ` ...
            End case
         End if
      : (Form event=On Losing Focus)
         vtAreaEstado:=""
            ` ...   
   End case

11. Este ejemplo muestra cómo responder al evento de cierre de una ventana con un formulario utilizado para la entrada de datos:

      ` Método para un formulario de entrada
   $vpFormTabla:=Current form table
   Case of
         ` ...
      : (Form event=On Close Box)
         If (Modified record($vpFormTabla->))
            CONFIRM ("Este registro ha sido modificado. ¿Quiere guardar los cambios?")
            If (OK=1)
               ACCEPT
            Else
               CANCEL
            End if
         Else
            CANCEL
         End if
            ` ...
   End case

12. Este ejemplo muestra cómo pasar a mayúsculas un campo de tipo texto o alfanumérico cada vez que el valor se modifique:

      `Método de objeto para [Contactos]Nombre
   Case of
         ` ...
      : (Form event=On Data Change)
         [Contactos]Nombre:= Uppercase(Substring([Contactos]Nombre;1;1))+
                                       Lowercase(Substring([Contactos]Nombre;2))
            ` ...
   End case

Ver también

CALL PROCESS, Current form table, DRAG AND DROP PROPERTIES, FILTER KEYSTROKE, Get edited text, Keystroke, SET TIMER.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente