4D v14.3

ON EVENT CALL

Página Inicial

 
4D v14.3
ON EVENT CALL

ON EVENT CALL 


 

ON EVENT CALL ( metodoEvento {; nomeProcesso} ) 
Parâmetro Tipo   Descrição
metodoEvento  cadeia in Método evento a ser invocado, ou cadeia vazia para parar eventos interceptados
nomeProcesso  cadeia in Nome do processo

O comando ON EVENT CALL instala o método, cujo nome se passa em metodoEvento, como método de gestão de eventos.

Dica: este comando necessita um nível de conhecimento avançado em programação. Geralmente, não necessita utilizar ON EVENT CALL para trabalhar com eventos. Quando utiliza formulários, 4D administra os eventos e os envia aos objetos e formulários apropriados.

Dica: comandos tais como  GET MOUSE, Shift down, etc., para obter informação sobre eventos. Estes comandos podem chamar-se desde os métodos de objeto para obter a informação que necessita sobre um evento envolvido com um objeto. Utilizá-los lhe economiza a escritura de um algoritmo baseado em uma estrutura de tipo ON EVENT CALL.

O alcance deste comando é a sessão de trabalho atual. Automaticamente, o método se executa em um processo local separado. Só pode ter um método de gestão de eventos a la vez. Para deter um método de gestão de eventos, chame novamente ON EVENT CALL e passe uma cadeia vazia em metodoEvento.

Como o método de gestão de eventos é executado em um processo separado, está ativo constantemente, inclusive se nenhum método de 4D  está sendo executado. Depois da instalação, 4D chama ao método de gestão de eventos cada vez que ocorre um evento. Um evento pode ser um clique com o mouse ou pressionar uma tecla.

O parâmetro opcional nomeProcesso nomeia ao processo criado pelo comando ON EVENT CALL. Se nomeProcesso começa pelo símbolo dinheiro ($), começa um processo local, o qual geralmente é o que você quer. Se omitir o parâmetro nomeProcesso, 4D cria automaticamente um processo local chamado $Event Manager.

Advertência: seja muito cuidadoso com o que escreve em um método de gestão de eventos. NAO chame comandos que gerem eventos, do contrário será extremamente difícil sair da execução do método de gestão de eventos. A combinação de teclas Ctrl+Shift+Retrocesso (em Windows) ou comando-Shift-Opção-Control-Retrocesso (em Macintosh) converte o processo de evento em um processo normal. Isto significa que o método não será passado automaticamente a todos os eventos que ocorram. Poderia utilizar esta técnica para recuperar um método de gestão de eventos incontrolável (por exemplo, um que tenha eventos que disparem bugs).

No método de gestão de eventos, pode ler as seguintes variáveis sistema MouseDown, KeyCode, Modifiers, MouseX, MouseY e MouseProc. Note que estas variáveis são variáveis processo. Seu alcance é portanto o processo de gestão de eventos. Copie-as nas variáveis interprocesso se deseja que seus valores estejam disponíveis em outro processo.

  • A variável sistema MouseDown toma o valor 1 se o evento é um clique do mouse e 0 se não.
  • A variável sistema KeyCode contém o código do caractere digitado no teclado ou o código de uma tecla de função. Consulte a seção Códigos Unicode (e suas subseções) e Códigos ASCII como também na seção Códigos de Função de teclado.4D oferece constantes predefinidas para os principais Códigos Unicode e teclas de funções. Na janela do explorador, procure os temas destas constantes.
  • A variável sistema Modifiers contém o valor modificador, indica se alguma das seguintes teclas foram pressionadas quando o evento ocorreu:
PlataformaModificadores
WindowsMaiús, Bloqueio de maiúsculas, Alt, Ctrl, Botão direito do mouse
MacintoshMaiús, Bloqueio de maiúsculas, Opção, Comando, Control
Notas
- a tecla Windows ALT é equivalente a tecla Macintosh Opção.
- a tecla Windows Ctrl é equivalente a tecla Macintosh Comando.
- a tecla Macintosh Control não tem equivalente em Windows. Entretanto, um clique direito em Windows é equivalente a um Control-Clique em Macintosh.

As teclas modificadoras não geram um evento; também deve pressionar outra tecla ou o botão do mouse. A variável Modifiers é uma variável de tipo Inteiro longo de 4 bytes, que deve ser considerada como um array de 32 bits. 4D oferece constantes predefinidas que expressam posições de bit ou máscaras de bit para provar o bit correspondente a cada tecla modificadora. Por exemplo, para detectar se a tecla Shift foi pressionada para o evento, pode escrever:

 If(Modifiers?? Shift key bit) ` Se a tecla Shift foi pressionada

ou:

 If((Modifiers & Shift key mask)#0) ` Se a tecla Shift foi pressionada

Nota: em Windows, o valor 128 se adiciona la variável Modifiers se o botão (esquerda) do mouse é liberado no momento do evento.

  • as variáveis sistema MouseX e MouseY contêm as posições horizontal e vertical do clique do mouse, expressas no sistema de coordenadas locais da janela onde o clique foi produzido. A esquina superior esquerda da janela é a posição 0,0. Estas variáveis são significativas só quando há um clique do mouse.
  • a variável sistema MouseProc contém o número de referência do processo no qual ocorreu o evento (clique do mouse).

Importante: as variáveis sistema MouseDown, KeyCode, Modifiers, MouseX, MouseY, e MouseProc só contem valores significativos em um método de gestão de eventos instalado com ON EVENT CALL.

Exemplo  

Este exemplo cancela a impressão se o usuário pressiona as teclas Ctrl+ponto. Primeiro, o método de gestão de eventos é instalada. Depois aparece uma mensagem, anunciando que o usuário pode cancelar a impressão. Se a variável interprocesso vbWeStop é igual a True no método de gestão de eventos, uma caixa de diálogo de alerta aparece para mostrar ao usuário o número de registros que foram impressos. Depois o método de gestão de eventos é desinstalado:

 PAGE SETUP
 If(OK=1)
    ◊vbWeStop:=False
    ON EVENT CALL("GESTAO DE EVENTOS") ` Instala o método de gestão de eventos
    ALL RECORDS([Pessoas])
    MESSAGE("Para interromper a impressão pressione Ctrl+Ponto.")
    $vlNbRegistros:=Records in selection([People])
    For($vlRegistro;1;$vlNbRegistros)
       If(◊vbWeStop)
          ALERT("Printing cancelled at record "+String($vlRegistro)+" of "+String($vlNbRegistros))
          $vlRegistro:=$vlNbRegistros+1
       Else
          Print form([Pessoas];"Relatório especial")
       End if
    End for
    PAGE BREAK
    ON EVENT CALL("") ` Desinstala o método de gestão de eventos
 End if

Se for pressionado a combinação Ctrl+ponto, o método de gestão de eventos da a vbWeStop o valor True:

  ` Método de projeto GESTAO DE EVENTOS
 If((Modifiers?? Command key bit) & (KeyCode=Period))
    CONFIRM("Tem certeza?")
    If(OK=1)
       ◊vbWeStop:=True
       FILTER EVENT ` NAO esqueça este chamado; do contrário 4D também obterá este evento
    End if
 End if

Note que este exemplo utiliza ON EVENT CALL porque realiza um relatório especial de impressão utilizando os comandos PAGE SETUP, Print form e PAGE BREAK em uma estrutura de tipo loop .
Se um relatório for impresso utilizando PRINT SELECTION, NAO necessita administrar os eventos que permitem ao usuário interromper a impressão; PRINT SELECTION faz isso por você.

 
PROPRIEDADES 

Produto: 4D
Tema: Interrupções
Número 190

Este comando não pode ser utilizado com 4D Server

 
HISTÓRIA 

Criado por: < 4D v6

 
VER TAMBÉM 

FILTER EVENT
GET MOUSE
Method called on event
Shift down

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v11 SQL Release 6)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)
Manual de linguagem 4D ( 4D v14 R4)