Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v20 R7
CALL FORM

CALL FORM 


 

CALL FORM ( ventana ; metodo {; param}{; param2 ; ... ; paramN} ) 
Parámetro Tipo   Descripción
ventana  WinRef in Número de referencia de la ventana
metodo  Objeto, Texto in Nombre del método proyecto a llamar
param  Expresión in Parámetros pasados al método

El comando CALL FORM ejecuta el código designado en formula con el(los) param(s) opcional(es) en el contexto de un formulario que se muestra en una ventana, independientemente del proceso al que pertenece la ventana.

Al igual que en la comunicación entre procesos basada en los workers (ver Sobre workers), un cuadro de mensaje está asociado a la ventana y se puede utilizar cuando la ventana muestra un formulario (después del evento On Load). CALL FORM encapsula la formula y sus argumentos en un mensaje que se ha enviado en el cuadro de mensaje de la ventana. El formulario a continuación, ejecuta el mensaje en su propio proceso. El proceso de llamada puede ser cooperativo o apropiativo, por tanto, esta funcionalidad permite a un proceso apropiativo intercambiar información con los formularios.

En ventana, pase el número de referencia de la ventana que muestra el formulario llamado.

En formula, designe el código 4D que se ejecutará en el contexto del proceso padre de ventana. Puede pasar:

  • un objeto fórmula (ver Objetos Fórmula). Los objetos fórmula pueden encapsular cualquier expresión ejecutable, incluyendo funciones y métodos proyecto;
  • una cadena que contenga el nombre de un método proyecto.

También puede pasar parámetros a la fórmula utilizando uno o más parámetros param. Puede utilizar parámetros secuenciales o, si la expresión de la fórmula es una función o un método de proyecto, parámetros nombrados. Al iniciar la ejecución en el contexto del formulario, la fórmula proceso recibe los valores parámetro en $1, $2, etc. Recuerde que los arrays no pueden ser pasados ​​como parámetros a un método. Además, en el contexto del comando CALL FORM, las siguientes consideraciones adicionales deben tenerse en cuenta:

  • Se permiten punteros a tablas o campos.
  • Los punteros a las variables, particularmente las variables locales y de proceso, no se recomiendan ya que estas variables pueden no estar definidas en el momento en que el método de proceso acceda.
  • Si pasa un parámetro de tipo Objeto o Colección, 4D crea una copia del objeto o de la colección en el proceso de destino (en lugar de una referencia) si el formulario está en un proceso diferente del que llama al comando CALL FORM.

Puede utilizar el comando CALL FORM para pasar configuraciones personalizadas a un formulario, por ejemplo valores de configuración, sin tener que utilizar variables proceso:

 $win:=Open form window("form")
 CALL FORM($win;Formula(configure);param1;param2)
 DIALOG("form")

Usted quiere abrir dos ventanas de diálogo diferentes en el mismo formulario, pero con diferentes colores de fondo y diferentes mensajes. También desea enviar mensajes después y mostrarlos en cada ventana de diálogo.

En el formulario principal, un botón abre los dos diálogos:

  //Crear método objeto formularios
  // primera ventana
 formRef1:=Open form window("FormMessage";Palette form window;On the left)
 SET WINDOW TITLE("MyForm1";formRef1)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef1)
 
  //segunda ventana
 formRef2:=Open form window("FormMessage";Palette form window;On the left+500)
 SET WINDOW TITLE("MyForm2";formRef2)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef2)
 
  //Enviar colores
 CALL FORM(formRef1;"doSetColor";0x00E6F2FF)
 CALL FORM(formRef2;"doSetColor";0x00F2E6FF)
  //Dibujar mensajes
 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello Form 2")

El método doAddMessage sólo añade una línea en un list box en el formulario "FormMessage":

 C_TEXT($1// nombre del llamador
 C_TEXT($2// mensaje a mostrar
  // recibir mensaje desde $2 y log el mensaje en list box
 $p:=OBJECT Get pointer(Object named;"Column1")
 INSERT IN ARRAY($p->;1)
 $p->{1}:=$1+" sends "+$2

En ejecución, obtiene el siguiente resultado:

Luego puede añadir otros mensajes ejecutando el comando CALL FORM nuevamente:

 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello 2 Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello 2 Form 2")



Ver también 

CALL WORKER
DIALOG
Download HDI database

 
PROPIEDADES 

Producto: 4D
Tema: Eventos de formulario
Número 1391

This command can be run in preemptive processes

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D v15 R5
Modificado: 4D v16 R4
Modificado: 4D v19 R6

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v20 R7)