4D v16

Eventos

Página Inicial

 
4D v16
Eventos

Eventos    


 

 

Além das manipulações explicadas no vídeo, também se deve levar em conta que:

Não todos os objetos têm os mesmos eventos: por exemplo, não se pode selecionar o evento "On Data Change" para um botão, como não pode "entrar" em seu conteúdo (título).

Estes são alguns exemplos:

  • On Mouse Enter
    Quando o mouse entra no "espaço aéreo" de um objeto.
  • On Data Change
    Ao sair de um campo ou uma variável cujo conteúdo foi mudado.
    Isto se utiliza sobre todo para os controles de entrada, formato (maiúsculas e minúsculas), pesquisas e cálculos.
  • On Clicked
    Quando é feito clique em um objeto (principalmente botões, pop-ups, menus, etc.)
    Também podem ser utilizados em objetos editáveis.
  • On Getting Focus
    O objeto acaba de receber o foco (de On Clicked, se utiliza com a tecla tab ou por programação).
  • On Load
    Justo antes que um formulário seja mostrado na tela ou se utilize durante uma impressão.
    Durante este evento geralmente se realiza a inicialização.
  • On Printing Detail
    Durante a impressão de registros.
    Permite, por exemplo, definir um valor para as variáveis de total, concatenação.

Esta lista lhe ajudará a entender os eventos. Pode consultar a documentação de 4D para obter uma descrição completa dos eventos.

Há um detalhe importante que os  usuários novos sempre perguntam: “¿Devo selecionar os eventos de formulário ou os eventos de objetos?” A resposta é simples: tudo depende de onde vai ser criado seu método.
O método formulário, em teoria, só deve conter o que é relevante para processar todo o formulário:

  • Redimensionar
  • Chamada exterior
  • Visualização/ocultar objetos
  • etc.

Enquanto os métodos objeto devem conter o que é específico a cada objeto (botão, campo, etc.) Essa é a regra geral e você deve ter boas razões antes que a considere quebrar.

Lembre:

  • Método formulário: centralizado, processamento global, fácil manutenção.
    Risco de ser executado com mais frequência do que o necessário.
  • Método objeto: específico, adaptado, executado somente quando seja necessário.
    Permite facilmente mover um objeto utilizando copiar e colar (sobre se utiliza ponteiros).
    Obriga a duplicar o método ou chamar ao método em cada objeto.

O que sucede é que movemos certos processos no método formulário.

Por exemplo, deve recalcular um valor em função de 10 parâmetros editáveis. Para cada parâmetro modificado, deve voltar a realizar o cálculo. No lugar de colocar a fórmula (ou chamada de método) em cada um dos 10 campos parâmetros, é possível mover este cálculo no método formulário.

Neste caso, é mais fácil e centralizado, no entanto, é bem provável que o novo cálculo se realize com maior frequência do que o necessário, especialmente durante a modificação de uma área que não figura no cálculo final.  (Nota: 4D permite saber qual foi o objeto modificado para que podamos adaptar o cálculo de acordo com esta informação).

É importante saber a ordem em que os eventos se executam. Por exemplo, para um botão, os eventos se executam na seguinte ordem:

  • On Mouse Enter
  • On Mouse Move
  • On Getting Focus
  • On Clicked (if any)
  • On Mouse Leave
  • On Losing Focus

Um campo ou uma variável onde seja feito clique:

  • On Mouse Enter
  • On Mouse Move
  • On Getting Focus
  • On Data Change (if any)
  • On Losing Focus
  • On Mouse Leave

Para economizar tempo ao escrever seu código e torná-lo mais confiável, lembre configurar macros (archivo “macros.xml”).

Por exemplo, pode criar um macro que escreva o seguinte código quando digite “#$evt” em seu método:

 $evt:=Form event
 Case of
    :($evt=On Data Change)
 
    :($evt=On Load)
 
 End case

Enquanto esteja aprendendo a utilizar 4D, lhe recomendamos começar por colocar seus métodos em seus objetos, terá maior flexibilidade para a atualização. Logo, comece por utilizar as chamadas de métodos genéricos e por último, quando tudo funcione corretamente, veja o que pode passar dos métodos objeto a seu método formulário ou métodos projetos. A continuação pode começar a passar ponteiros também.

Para ir mais longe:
Dê uma boa olhada a como funcionam os eventos, já que lhe permitirá entender exatamente quando executar sua programação. Também encontrará uma série de ideias para dar poderosos primeiros passos utilizando eventos tais como:

  • On Drag Over
  • On Drop
  • On Selection Change
  • mais os três eventos ’On Mouse’ (Move, Leave, Enter)

E claro os grandes clássicos:

  • On Clicked
  • On Double Clicked
  • On Long Click
  • etc.

Neste vídeo, vamos a aprender o funcionamento dos eventos e sua programação.

Primeiro, vamos a diferenciar entre:

  • Os eventos "formulário" que figuram nas propriedades do formulário
  • Os eventos "da base de dados" que se definem nas propriedades de uma tabela, os eventos base associados aos triggers, em outras palavras, a programação que se executa quando ocorre um evento específico.

Os eventos de formulário só se ativam quando se utiliza um formulário (na tela ou ao imprimir), portanto, quando a interface está sendo utilizada por um usuário (clique, arrastar e soltar, seleção de elementos de um menu, teclado...).

Os eventos base só se referem a 3 ações que se realizam nos dados:

  • Criação
  • Modificação
  • Eliminação.

Estes 3 eventos são interceptados pelo motor de dados. Isto é importante já que em modo cliente/servidor, o motor de dados se executa no servidor pelo que nunca irá ver um evento de base de dados ser executado no computador cliente. Não poderá ser rastreado desde um computador cliente. Volveremos aos eventos de base de dados mais a frente.

Em primeiro lugar, vamos nos divertir um pouco e criar um botão um tanto "especial".

  • Vamos à página 4 do formulário Navigation, página das preferências.
  • Desenhamos um botão estandarte
  • Modificamos suas propriedades:
  •      - o nome do botão será bSpecial
  •      - só o evento "On Mouse Enter" permanece selecionado
  • E editamos o método do botão (Alt + clique no botão)

introduzimos o seguinte código:

  //Localização do mouse quando inicia o método
 GET MOUSE($Mouse_H;$Mouse_V;$MouseButton//Aonde está o objeto na janela
 OBJECT GET COORDINATES(bSpecial;$Obj_L;$Obj_T;$Obj_R;$Obj_B)
 
  //Calculemos o centro do objeto
 $Center_H:=$Obj_L+(($Obj_R-$Obj_L)/2)
 $Center_V:=$Obj_T+(($Obj_B-$Obj_T)/2)
 
 $Shift:=10 //Planejar um deslocamento adicional de X píxeles
 
 If($Mouse_H<$Center_H//Se o mouse está à esquerda do centro
    $T:=$Mouse_H-$Obj_L+$Shift  //Mover o objeto à direita
 Else //O mouse está à direita do centro
    $T:=-($Obj_R-$Mouse_H+$Shift//Mover o objeto à esquerda
 End if

 If($Mouse_V<$Center_V//Se o mouse está encima do centro
    $B:=$Mouse_V-$Obj_T+$Shift  //Mover para baixo
 Else //O mouse está debaixo do centro
    $B:=-($Obj_B-$Mouse_V+$Shift//Mover para cima
 End if
 
  //Mover o botão de acordo à informação definida acima
 OBJECT MOVE(bSpecial;$T;$B)

O que significa que:

  • Calculamos à posição do mouse
  • A posição do objeto (o botão) para determinar seu centro
  • Planejamos mover o objeto um determinado número de píxeles
  • E a continuação vamos a calcular onde está o mouse de acordo ao centro do botão, horizontalmente e verticalmente.
  • A continuação, podemos simplesmente mover a posição do botão.

Vamos ver no que isto nos dá:

  • Mostramos o formulário (usando o método Navigation)
  • Vamos à página de preferências
  • E tratamos de fazer clique no botão.

Cada vez que nos acercamos ao botão, é movida na direção oposta (esquerda, direita, acima ou abaixo). 

Se o botão se retira da tela, fechamos o formulário e começamos de novo, o botão voltará a aparecer em sua posição inicial.

Esse foi um exemplo do uso de eventos.

Demos uma olhada a outro exemplo: durante a entrada de uma intervenção, queremos calcular sua duração com base na informação introduzida na hora de inicio e final.

Teremos que:

  • Primeiro adicionar o campo End time à tabela.
    Para economizar tempo, copiamos o campo Time e o colamos na tabela e logo mudamos seu nome.
  • A continuação será adicionada ao formulário de entrada duplicando o campo de hora de inicio e adaptando o campo correspondente: hora de intervenção final.
  • Adicionamos a duração para verificar que nossa programação funcione corretamente.
  • A continuação, devemos indicar que a duração deve ser recalculada quando um dos campos de hora seja modificado.
  • Selecionamos o evento "On Data Change" e indicamos o cálculo a realizar.
    Atenção: ALT-Clic em 2 objetos que não têm os métodos, cria o método somente para o objeto no qual foi feito clique.

A duração se recalculará como a diferença entre a hora final menos a hora de intervenção, com a condição de que o tempo final se enche (em outras palavras, que não seja zero).

Agora podemos copiar o código e criar o método de hora de final.

Quando vamos a modificá-la: a hora de intervenção deve ser preenchida e o cálculo da duração sempre será o mesmo.
É claro, vamos a comprovar que as horas sejam editadas e logo vamos a provar em uma intervenção:

  • Tomamos todas as intervenções,
  • Logo tomamos à primeira
  • Introduzimos 14:00 e temos uma duração de 2 horas que se calcula
  • de 12:00 a 17:30 => 5:30
  • Se começamos às 14:00, então temos uma duração de 3:30

A programação foi realizada realmente quando saímos do campo, em outras palavras, no contexto do evento "On Data Change".

Na seguinte seção, vamos a tratar a programação de arrays.

 
 

 
PROPRIEDADES 

Produto: 4D
Tema: Eventos

 
HISTÓRIA 

 
ARTICLE USAGE

Autoformação ( 4D v16)