CALL FORM
CALL FORM ( janela ; metodo {; param}{; param2 ; ... ; paramN} )
Parâmetro | Tipo | Descrição | |
---|---|---|---|
janela | Integer | → | Número de referência da janela |
metodo | Object, Text | → | Nome do método de projeto a chamar |
param | Expression | → | Parâmetros passados ao método |
Gestão de erros
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 formula, designe o código 4D que se executará no contexto do processo pai de janela. Pode passar:
- um objeto fórmula (ver Objetos Fórmula). Os objetos fórmula podem encapsular qualquer expressão executável, incluindo funções e métodos projeto;
- uma string que contenha o nome de um método projeto.
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 ). 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 ou Coleção, 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.
Exemplo 1
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;Formula(configure);param1;param2)
DIALOG("form")
Exemplo 2
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