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:
GET MOUSE($Mouse_H;$Mouse_V;$MouseButton)
OBJECT GET COORDINATES(bSpecial;$Obj_L;$Obj_T;$Obj_R;$Obj_B)
$Center_H:=$Obj_L+(($Obj_R-$Obj_L)/2)
$Center_V:=$Obj_T+(($Obj_B-$Obj_T)/2)
$Shift:=10
If($Mouse_H<$Center_H)
$T:=$Mouse_H-$Obj_L+$Shift
Else
$T:=-($Obj_R-$Mouse_H+$Shift)
End if
If($Mouse_V<$Center_V)
$B:=$Mouse_V-$Obj_T+$Shift
Else
$B:=-($Obj_B-$Mouse_V+$Shift)
End if
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.