Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Form event code
|
Form event code -> Resultado | ||||||||
Parámetro | Tipo | Descripción | ||||||
Resultado | Entero largo |
![]() |
Número del evento de formulario | |||||
Form event code se llamaba Form event en versiones anteriores de 4D. Se renombró para mayor claridad cuando se agregó el comando FORM Event, que devuelve un objeto.
Form event code devuelve un valor numérico que identifica el tipo de evento de formulario que acaba de ocurrir. Generalmente, Form event code se utiliza en un método formulario o en un método objeto.
4D ofrece constantes predefinidas (ubicadas en el tema Eventos formulario) para comparar los valores devueltos por el comando Form event code.
Ciertos eventos son genéricos (generados por todo tipo de objeto) y otros son específicos a un tipo de objeto particular.
Constante | Tipo | Valor | Comentario |
On Load | Entero largo | 1 | El formulario se muestra o se imprime |
On Mouse Up | Entero largo | 2 | (Sólo imágenes) El usuario acaba de liberar el botón izquierdo del ratón en un objeto Imagen |
On Validate | Entero largo | 3 | Se ha valido la entrada de datos en el registro |
On Clicked | Entero largo | 4 | Ocurre un clic sobre un objeto |
On Header | Entero largo | 5 | El encabezado del formulario se va a imprimir o a mostrar |
On Printing Break | Entero largo | 6 | Se va a imprimir una de las áreas de ruptura del formulario |
On Printing Footer | Entero largo | 7 | Se va a imprimir el área de pie de página del formulario |
On Display Detail | Entero largo | 8 | Un registro se va a mostrar en una lista o una línea se va a mostrar en un list box. |
On VP Ready | Entero largo | 9 | (Áreas 4D View Pro únicamente) La carga del área 4D View Pro está completa |
On Outside Call | Entero largo | 10 | El formulario recibe una llamada POST OUTSIDE CALL |
On Activate | Entero largo | 11 | La ventana del formulario se convierte en la ventana del primer plano |
On Deactivate | Entero largo | 12 | La ventana del formulario deja de ser la ventana del primer plano |
On Double Clicked | Entero largo | 13 | Un objeto ha recibido un doble clic |
On Losing Focus | Entero largo | 14 | Un objeto de formulario está perdiendo el foco |
On Getting Focus | Entero largo | 15 | Un objeto de formulario toma el foco |
On Drop | Entero largo | 16 | Se han soltado datos en un objeto |
On Before Keystroke | Entero largo | 17 | Un carácter está a punto de introducirse en el objeto que tiene el foco. Get edited text devuelve el texto del objeto sin este carácter. |
On Menu Selected | Entero largo | 18 | Se ha seleccionado un comando de menú |
On Plug in Area | Entero largo | 19 | Un objeto externo solicitó que se ejecute su método de objeto |
On Data Change | Entero largo | 20 | Se han modificado los datos de un objeto |
On Drag Over | Entero largo | 21 | Los datos pueden soltarse en un objeto |
On Close Box | Entero largo | 22 | Se ha hecho clic en la casilla de cerrar la ventana |
On Printing Detail | Entero largo | 23 | Se va a imprimir el área de detalle del formulario |
On Unload | Entero largo | 24 | El formulario se cierra y libera |
On Open Detail | Entero largo | 25 | El formulario detallado asociado con el formulario de salida o con el listbox está apunto de ser abierto |
On Close Detail | Entero largo | 26 | Se cierra el formulario de entrada y regresa al formulario de salida |
On Timer | Entero largo | 27 | El número de tics definido por el comando SET TIMER se ha pasado |
On After Keystroke | Entero largo | 28 | Un carácter está apunto de introducirse en el objeto que tiene el foco. Get edited text devuelve el contenido incluyendo este carácter |
On Resize | Entero largo | 29 | La ventana del formulario se redimensiona |
On After Sort | Entero largo | 30 | (List box únicamente) Se acaba de efectuar una ordenación estándar en una columna del list box |
On Selection Change | Entero largo | 31 |
|
On Column Moved | Entero largo | 32 | (List box únicamente) El usuario mueve una columna de list box vía arrastrar y soltar |
On Column Resize | Entero largo | 33 | (List box únicamente) El ancho de una columna de list box es modificado por un usuario con el ratón |
On Row Moved | Entero largo | 34 | (List box únicamente) El usuario mueve una fila de un list box vía arrastrar y soltar |
On Mouse Enter | Entero largo | 35 | El cursor del ratón entra al área gráfica de un objeto |
On Mouse Leave | Entero largo | 36 | El cursor del ratón sale del área gráfica de un objeto |
On Mouse Move | Entero largo | 37 | El cursor del ratón se mueve al menos un píxel O cuando se presiona una tecla de modificación (Ctrl, Alt, Bloq mayús). Si el evento está seleccionado para un objeto únicamente, se genera sólo cuando el cursor se encuentra dentro del área gráfica del objeto |
On Alternative Click | Entero largo | 38 |
|
On Long Click | Entero largo | 39 | (Botones 3D únicamente) Se hace clic en un botón 3D y el botón del ratón permanece presionado por un cierto tiempo |
On Load Record | Entero largo | 40 | En modo entrada en lista, se carga un registro durante modificación (el usuario hace clic en una línea del registro y un campo pasa a modo edición) |
On Before Data Entry | Entero largo | 41 | (List box únicamente) Una celda de list box está a punto de pasar a modo edición |
On Header Click | Entero largo | 42 | (List box únicamente) Ocurre un clic en un encabezado de columna del list box |
On Expand | Entero largo | 43 | (Listas jerárquicas únicamente) Se ha expandido un elemento de la lista jerárquica utilizando un clic o una tecla |
On Collapse | Entero largo | 44 | (Listas jerárquicas únicamente) Un elemento de la lista jerárquica se ha contraído vía un clic o una tecla |
On After Edit | Entero largo | 45 | El contenido del objeto editable que tiene el foco acaba de ser modificado |
On Begin Drag Over | Entero largo | 46 | Se va a arrastrar un objeto |
On Begin URL Loading | Entero largo | 47 | (Áreas web únicamente) Un nuevo URL se carga en el área web |
On URL Resource Loading | Entero largo | 48 | (Áreas web únicamente) Se carga un nuevo recurso en el área web |
On End URL Loading | Entero largo | 49 | (Áreas web únicamente) Se han cargado todos los recursos del URL |
On URL Loading Error | Entero largo | 50 | (Áreas web únicamente) Ocurrió un error cuando se cargaba el URL |
On URL Filtering | Entero largo | 51 | (Áreas web únicamente) Un URL fue bloqueado por el área web |
On Open External Link | Entero largo | 52 | (Áreas web únicamente) Se ha abierto un URL externo en el navegador |
On Window Opening Denied | Entero largo | 53 | (Áreas web únicamente) Se ha bloqueado una ventana pop-up |
On bound variable change | Entero largo | 54 | Se modifica la variable relacionada a un subformulario. |
On Page Change | Entero largo | 56 | Al cambiar de página actual en el formulario |
On Footer Click | Entero largo | 57 | (List box únicamente) Un clic en el pie de un list box o de una columna de list box |
On Delete Action | Entero largo | 58 | (Listas jerárquicas y list box únicamente). El usuario solicita borrar un elemento. |
On Scroll | Entero largo | 59 | El usuario desplaza el contenido de un campo o de una variable imagen utilzando el ratón o una tecla. |
On Row Resize | Entero largo | 60 | (4D View Pro únicamente) La altura de una línea es modificada por un usuario con el ratón |
On VP Range Changed | Entero largo | 61 | El rango de celdas 4D View Pro ha cambiado (por ejemplo, el cálculo de una fórmula, el valor eliminado de una celda, etc.) |
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.
Cuando ocurre un evento de formulario, 4D efectúa las siguientes acciones:
No asuma que los métodos de objeto, si los hay, se llamarán en un orden particular. La regla es que los métodos de objeto siempre se llaman 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:
Advertencia: a diferencia de otros eventos, durante un evento On Begin 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.
Para cada objeto del área de encabezado: |
|
La siguiente tabla resume cómo se llaman los métodos de formulario y objetos para cada tipo de evento:
Evento | Métodos de objeto | Método de formulario | Qué objetos |
On Load | Sí | Sí | Todos |
On Unload | Sí | Sí | Todos |
On Validate | Sí | Sí | Todos |
On Clicked | Sí (si cliqueable o editable) (*) | Sí | Sólo el objeto implicado |
On Double Clicked | Sí (si cliqueable o editable) (*) | Sí | Sólo el objeto implicado |
On Before Keystroke | Sí (si editable) (*) | Sí | Sólo el objeto implicado |
On After Keystroke | Sí (si editable) (*) | Sí | Sólo el objeto implicado |
On After Edit | Sí (si editable) (*) | Sí | Sólo el objeto implicado |
On Getting Focus | Sí (si tabulable) (*) | Sí | Sólo el objeto implicado |
On Losing Focus | Sí (si tabulable) (*) | Sí | Sólo el objeto implicado |
On Activate | Nunca | Sí | Ninguno |
On Deactivate | Nunca | Sí | Ninguno |
On Outside Call | Nunca | Sí | Ninguno |
On Begin drag over | Sí (si arrastrable) (**) | Sí | Sólo el objeto implicado |
On Drop | Sí (si soltable) (**) | Sí | Sólo el objeto implicado |
On Drag Over | Sí (si soltable) (**) | Nunca | Sólo el objeto implicado |
On Mouse Enter | Sí | Sí | Todos |
On Mouse Move | Sí | Sí | Todos |
On Mouse Leave | Sí | Sí | Todos |
On Mouse Up | Sí | Nunca | Sólo el objeto implicado |
On Menu Selected | Nunca | Sí | Ninguno |
On bound variable change | Nunca | Sí | Ninguno |
On Data Change | Sí (si modificable) (*) | Sí | Sólo el objeto implicado |
On Plug in Area | Sí | Sí | Sólo el objeto implicado |
On Header | Sí | Sí | Todos |
On Printing Detail | Sí | Sí | Todos |
On Printing Break | Sí | Sí | Todos |
On Printing Footer | Sí | Sí | Todos |
On Close Box | Nunca | Sí | Ninguno |
On Display Detail | Sí | Sí | Todos |
On Open Detail | No, excepto para List boxes | Sí | Ninguno excepto List box |
On Close Detail | No, excepto para List boxes | Sí | Ninguno excepto List box |
On Resize | Nunca | Sí | Ninguno |
On Selection Change | Sí (***) | Sí | Sólo el objeto implicado |
On Load Record | Nunca | Sí | Ninguno |
On Timer | Nunca | Sí | Ninguno |
On Scroll | Sí | Nunca | Objeto involucrado únicamente |
On Picture Scroll | Sí | Sí | Objeto involucrado únicamente |
On Before Data Entry | Sí (List box) | Nunca | Sólo el objeto implicado |
On Column Moved | Sí (List box) | Nunca | Sólo el objeto implicado |
On Row Moved | Sí (List box) | Nunca | Sólo el objeto implicado |
On Column Resize | Sí (List box) | Nunca | Sólo el objeto implicado |
On Header Click | Sí (List box) | Nunca | Sólo el objeto implicado |
On After Sort | Sí (List box) | Nunca | Sólo el objeto implicado |
On Long Click | Sí (Botón 3D) | Sí | Sólo el objeto implicado |
On Alternative Click | Sí (Botón 3D y list box) | Nunca | Sólo el objeto implicado |
On Expand | Sí (Lista jerárq.) | Nunca | Sólo el objeto implicado |
On Collapse | Sí (Lista jerárq.) | Nunca | Sólo el objeto implicado |
On Delete Action | Sí (Lista jerárq. y list box) | Nunca | Sólo el objeto implicado |
On URL Resource Loading | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On Begin URL Loading | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On URL Loading Error | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On URL Filtering | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On End URL Loading | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On Open External Link | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On Window Opening Denied | Sí (Web Area) | Nunca | Sólo el objeto implicado |
On VP Ready | Sí (Área 4D View Pro) | Sí | Só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 activarse a nivel del formulario.
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.
Los objetos cliqueables son administrables principalmente con el ratón. Son los siguientes:
Cuando el evento On Clicked u On Double Clicked se selecciona para uno de estos objetos, puede detectar y administrar los clics en el objeto, utilizando el comando Form event code 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.
Nota: a partir de 4D v14, los campos y variables editables que contienen texto (tipo texto, fecha, hora o número) también generan los eventos On Clicked y On Double Clicked.
Para todos estos objetos, el evento On Clicked ocurre una vez se libera el botón del ratón. Sin embargo, hay varias excepciones:
En el contexto del evento On Clicked, puede probar el número de clics efectuados por el usuario con la ayuda del comando Clickcount.
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 se consideran objetos cliqueables. Un combo box debe tratarse 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.
Nota: a partir de 4D v13, los objetos de tipo pop up/lista desplegable y menú desplegable jerárquico pueden generar el evento On Data Change. Esto le permite detectar la activación del objeto cuando se selecciona un valor diferente del valor actual.
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, On After Keystroke y On Selection Change.
Los objetos y tipos de datos editables son los siguientes:
Nota: a partir de 4D v14, los campos y variables editables que contienen texto (tipo texto, fecha, hora o número) también generan los eventos On Clicked y On Double Clicked.
Nota: aunque son objetos “editables”, las listas jerárquicas no manejan los eventos formulario On After Edit, On Before Keystroke y On After Keystroke (Ver también el párrafo “Listas jerárquicas” a continuación).
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 code 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, tales 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 se generan 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.
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:
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 code 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).
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:
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.
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:
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”.
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 de herramientas, Bevel, Bevel redondeado y Office XP.
Varios eventos formulario pueden utilizarse para administrar las diferentes características específicas de los list box:
Dos eventos genéricos también pueden utilizarse en el contexto de un list box de tipo "selección":
Además de los eventos genéricos, varios eventos específicos pueden utilizarse para administrar las acciones que los usuarios en las listas jerárquicas:
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):
Evento | Contexto | |
On Data Change | Un elemento estaba en edición | |
On Expand/On Collapse | Apertura/cierre de una sublista utilizando las teclas de flechas -> o <- | |
On Selection Change | Selección de un nuevo elemento | |
On Clicked | Activación de la lista utilizando el teclado |
Evento | Contexto | |
On Data Change | Un elemento estaba en edición | |
On Expand/On Collapse | Apertura/cierre de una sublista utilizando los iconos de despliegue/contracción o | |
Doble-clic en una sublista no editable | ||
On Selection Change | Selección de un nuevo elemento | |
On Clicked / On Double Clicked | Activación de la lista por un clic o un doble clic |
Un objeto contenedor de subformulario (objeto incluido en el formulario padre, contiene una instancia de subformulario) soporta los siguientes eventos:
Nota: es posible definir todo tipo de evento personalizado que puede ser generado en un subformulario vía el comando CALL SUBFORM CONTAINER. Este comando le permite llamar al método del objeto contenedor y pasarle un código de evento.
Los siguientes eventos también son recibidos en el método formulario del subformulario:
Hay siete eventos de formularios específicamente disponibles para las áreas web:
Los siguientes eventos están disponibles para las áreas 4D View Pro.
Para más información sobre estos eventos, consulte la sección Evento formulario On VP Ready.
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 code=On Validate)
[aTable]Last Modified On:=Current date
End case
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 del objeto:
//Método de objeto del menú desplegable asBurgerSize
Case of
:(Form event code=On Load)
ARRAY TEXT(asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
:(Form event code=On Clicked)
If(asBurgerSize#0)
ALERT("You chose a "+asBurgerSize{asBurgerSize}+" burger.")
End if
:(Form event code=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
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.
//Método de objeto de campo Imagen editable [aTable]
Case of
:(Form event code=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($vpSrcObject;$vlSrcElement;$lSrcProcess)
//Note que no necesitamos probar el número de proceso fuente
//para el método de objeto ejecutado ya que es el mismo proceso
$vlDataType:=Type($vpSrcObject->)
//¿Los datos fuente son una imagen (campo, variable o array)?
If(($vlDataType=Is picture)|($vlDataType=Picture array))
//Si es así, acepte el arrastrar.
$0:=0
Else
//De lo contrario, rechace el arrastrar
$0:=-1
End if
:(Form event code=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($vpSrcObject;$vlSrcElement;$lSrcProcess)
$vlDataType:=Type($vpSrcObject->)
Case of
//El objeto fuente es un campo o una variable tipo imagen
:($vlDataType=Is picture)
//¿El objeto fuente es del mismo proceso (de la misma ventana y formulario)?
If($lSrcProcess=Current process)
//Si es así, copiar el valor fuente
[aTable]aPicture:=$vpSrcObject->
Else
//Si no, ¿el objeto fuente es una variable?
If(Is a variable($vpSrcObject))
//Si es así, obtener el valor del proceso fuente
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject->;$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
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
:($vlDataType=Picture array)
//¿Está el objeto fuente en el mismo proceso (en la misma ventana y formulario)?
If($lSrcProcess=Current process)
//Si es así, copiar el valor fuente
[aTable]aPicture:=$vpSrcObject->{$vlSrcElement}
Else
//Si no, obtener el valor del proceso fuente
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject->{$vlSrcElement};$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
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 _o_DRAG AND DROP PROPERTIES.
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
$vpFormTable:=Current form table
Case of
//...
:(Form event code=On Header)
//Un área de encabezado está apunto de imprimirse
Case of
:(Before selection($vpFormTable->))
//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 code=On Printing Detail)
//Se va a imprimir un registro
//El código para cada registro debe ir aquí
:(Form event code=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 code=On Printing Footer)
If(End selection($vpFormTable->))
//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
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 code=On Load)
$vsTheEvent:="El formulario va a ser visualizado"
:(Form event code=On Unload)
$vsTheEvent:="El formulario de salida ha sido cerrado y va a desaparecer de la pantalla"
:(Form event code=On Display Detail)
$vsTheEvent:=""Mostrando el registro#"+String(Selected record number([TheTable])
:(Form event code=On Menu Selected)
$vsTheEvent:="Un comando de menú ha sido seleccionado"
:(Form event code=On Header")
$vsTheEvent:="El área de encabezado está a punto de ser dibujada"
:(Form event code=On Clicked")
$vsTheEvent:="Se ha hecho clic en un registro"
:(Form event code=On Double Clicked")
$vsTheEvent:="Se ha hecho doble clic en un registro"
:(Form event code=On Open Detail)
$vsTheEvent:="Al registro #"+String(Selected record number([TheTable]))+" se le hizo doble clic"
:(Form event code=On Close Detail)
$vsTheEvent:="Regreso al formulario de salida"
:(Form event code=On Activate)
$vsTheEvent:="La ventana de formulario pasa al primer plano"
:(Form event code=On Deactivate)
$vsTheEvent:="La ventana del formulario ya no es más la ventana del primer plano"
:(Form event code=On Menu Selected)
$vsTheEvent:="Se ha seleccionado un elemento del menú"
:(Form event code=On Outside Call)
$vsTheEvent:="Se ha recibido otra llamada"
Else
$vsTheEvent:="¿Qué pasa? El evento #"+String(Form event)
End case
SET WINDOW TITLE($vsTheEvent)
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.
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 asChoices
Case of
:(Form event code=On Load)
ARRAY TEXT(asChoices;...)
//...
asChoices:=0
:((Form event code=On Clicked)|(Form event code=On Double Clicked))
If(asChoices#0)
//Se ha hecho clic en un elemento, hacer algo aquí
//...
End if
//...
End case
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 code=On Load)
ARRAY TEXT(asChoices;...)
// ...
asChoices:=0
asChoices{0}:="0"
:(Form event code=On Clicked)
If(asChoices#0)
If(asChoices#Num(asChoices))
//Se ha hecho clic en un nuevo elemento, hacer algo aquí
//...
//Guardar el nuevo elemento seleccionado para la próxima vez
asChoices{0}:=String(asChoices)
End if
Else
asChoices:=Num(asChoices{0})
End if
:(Form event code=On Double Clicked)
If(asChoices#0)
//Se ha hecho doble clic sobre un elemento, hacer algo diferente aquí
End if
// ...
End case
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:
// [Contacts];Método de formulario "Data Entry"
Case of
:(Form event code=On Load)
C_TEXT(vtStatusArea)
vtStatusArea:=""
:(Form event code=On Getting Focus)
RESOLVE POINTER(Focus object;$vsVarName;$vlTableNum;$vlFieldNum)
If(($vlTableNum#0)&($vlFieldNum#0))
Case of
:($vlFieldNum=1) //Campo nombre
vtStatusArea:="Introduzca el nombre del contacto; se pasará automáticamente a mayúsculas"
//...
:($vlFieldNum=10) //Zip Code field
vtStatusArea:="Introduzca un código postal; será verificado y validado automáticamente"
//...
End case
End if
:(Form event code=On Losing Focus)
vtStatusArea:=""
//...
End case
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
$vpFormTable:=Current form table
Case of
//...
:(Form event code=On Close Box)
If(Modified record($vpFormTable->))
CONFIRM("Este registro ha sido modificado. ¿Quiere guardar los cambios?")
If(OK=1)
ACCEPT
Else
CANCEL
End if
Else
CANCEL
End if
//...
End case
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 [Contacts]First Name
Case of
//...
:(Form event code=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))+Lowercase(Substring([Contacts]First Name;2))
//...
End case
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 [Contacts]First Name
Case of
//...
:(Form event code=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))+Lowercase(Substring([Contacts]First Name;2))
//...
End case
El siguiente ejemplo ilustra cómo manejar una acción de eliminación en una lista jerárquica:
... //método de la lista jerárquica
:(Form event code=On Delete Action)
ARRAY LONGINT($itemsArray;0)
$Ref:=Selected list items(<>HL;$itemsArray;*)
$n:=Size of array($itemsArray)
Case of
:($n=0)
ALERT("Ningún elemento seleccionado")
OK:=0
:($n=1)
CONFIRM("¿Quiere eliminar este elemento?")
:($n>1)
CONFIRM("¿Quiere eliminar estos elementos?")
End case
If(OK=1)
For($i;1;$n)
DELETE FROM LIST(<>HL;$itemsArray{$i};*)
End for
End if
En este ejemplo, el evento formulario On Scroll permite sincronizar la visualización de dos imágenes en un formulario. El siguiente código se añade en el método del objeto "satélite" (campo imagen o variable image):
Case of
:(Form event code=On Scroll)
// tomamos la posición de la imagen de la izquierda
OBJECT GET SCROLL POSITION(*;"satellite";vPos;hPos)
// y la aplicamos a la imagen de la derecha
OBJECT SET SCROLL POSITION(*;"plan";vPos;hPos;*)
End case
Resultado:
Usted desea dibujar un rectángulo rojo alrededor de la celda seleccionada de un list box y desea que el rectángulo se mueva junto con el list box si es desplazado verticalmente por el usuario. En el método objeto del list box, puede escribir:
Case of
:(Form event code=On Clicked)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True) //inicializa un rectángulo rojo
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
:(Form event code=On Scroll)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$xlb1;$ylb1;$xlb2;$ylb2)
$toAdd:=LISTBOX Get headers height(*;"LB1") //tener en cuenta la altura del encabezado para que no lo sobrepase
If($ylb1+$toAdd<$y1)&($ylb2>$y2) //si estamos dentro del list box
//para simplificar, sólo manejamos encabezados
//pero debemos manejar clipping horizontal
//así como también las barras de desplazamiento
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
Else
OBJECT SET VISIBLE(*;"RedRect";False)
End if
End case
Como resultado, el rectángulo rojo sigue el desplazamiento del list box:
_o_DRAG AND DROP PROPERTIES
CALL SUBFORM CONTAINER
Current form table
FILTER KEYSTROKE
FORM Event
Get edited text
Keystroke
POST OUTSIDE CALL
SET TIMER
Producto: 4D
Tema: Eventos de formulario
Número
388
Modificado: 4D v11 SQL Release 2
Modificado: 4D v12
Modificado: 4D v13
Modificado: 4D v13.2
Modificado: 4D v14
Modificado: 4D v15
Modificado: 4D v16
Modificado: 4D v16 R4
Renombrar: 4D v18 (Form event)
Manual de lenguaje 4D ( 4D v20 R7)