4D v16.3

CALL FORM

Página Inicial

 
4D v16.3
CALL FORM

CALL FORM 


 

CALL FORM ( janela ; metodo {; param}{; param2 ; ... ; paramN} ) 
Parâmetro Tipo   Descrição
janela  refJan in Número de referência da janela
metodo  Texto in Nome do método de projeto a chamar
param  in Parâmetros passados ao método

O comando CALL FORM executa o método de projeto cujo nome passou em metodo com um ou vários param(s) no contexto de um formulário que se mostra em uma janela, independentemente do processo ao que pertence a janela.

Da mesma forma que na comunicação entre processos baseada nos workers (ver Sobre Workers), um quadro de mensagem está associado a janela e pode ser utilizado quando a janela mostra um formulário (depois do evento On Load). CALL FORM encapsula o nome de método e seus argumentos em uma mensagem que tenha sido enviada no quadro de mensagens da janela. O formulário abaixo, executa a mensagem em seu próprio processo. O processo de chamada pode ser cooperativo o preemptivo, portanto, esta funcionalidade permite a um processo preemptivo intercambiar informação com os formulários.

Em janela, passe o número de referência da janela que mostra o formulário chamado.

Em metodo, passe o nome de método de projeto que se executará no contexto de processo pai da janela.

Também pode passar parâmetros ao método que utilizam um ou mais parámetros param. Passe os parâmetros da mesma maneira que os passaria a uma subrotina (ver Passando Parâmetros para Métodos). Ao iniciar a execução no contexto do formulário, o método recebe os valores parâmetro em $1, $2, etc. Lembre que os arrays não podem ser passados ​​como parâmetros a um método. Além disso, no contexto de comando CALL FORM, as seguintes considerações adicionais devem ser levadas em conta:

  • Ponteiros a tabelas ou campos são permitidos.
  • Não é recomendado ponteiros à variáveis, particularmente as variáveis locais e de processo, já que estas variáveis podem não estar definidas no momento em que o método de processo as acessar.
  • Se passar um parâmetro de tipo Objeto, 4D cria uma cópia de objeto no processo de destino se o formulário estiver em um processo diferente do qual chama ao comando CALL FORM.

Se quiser abrir duas janelas de diálogo diferentes no mesmo formulário, mas com diferentes cores de fundo e diferentes mensagens. Também deseja enviar mensagens despois e mostrar as mensagens em cada janela de diálogo.

No formulário principal, um botão abre os dois diálogos:

  //Criar método objeto formulários
  // primeira janela
 formRef1:=Open form window("FormMessage";Palette form window;On the left)
 SET WINDOW TITLE("MyForm1";formRef1)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef1)
 
  //segunda janela
 formRef2:=Open form window("FormMessage";Palette form window;On the left+500)
 SET WINDOW TITLE("MyForm2";formRef2)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef2)
 
  //Enviar cores
 CALL FORM(formRef1;"doSetColor";0x00E6F2FF)
 CALL FORM(formRef2;"doSetColor";0x00F2E6FF)
  //criar  mensagens
 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello Form 2")

O método doAddMessage só adiciona uma linha num list box no formulario "FormMessage":

 C_TEXT($1// nome do chamador
 C_TEXT($2// mensagem a mostrar
  // reciber mensagem desde $2 e log a mensagem em list box
 $p:=OBJECT Get pointer(Object named;"Column1")
 INSERT IN ARRAY($p->;1)
 $p->{1}:=$1+" sends "+$2

Em execução, obtém o seguinte resultado:

Depois pode adicionar outras mensagens executando o comando CALL FORM novamente:

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

Pode utilizar o comando CALL FORM para passar configurações personalizadas a um formulário, por exemplo valores de configuração, sem precisar utilizar variáveis processo:

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



Ver também 


CALL WORKER

 
PROPRIEDADES 

Produto: 4D
Tema: Formulários
Número 1391

This command can be run in preemptive processes

 
HISTÓRIA 

Criado por: 4D v15 R5

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)