CAPÍTULO 3
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini



Teclado


De forma similar ao mouse, o teclado controla-se com os eventos KeyPress e KeyRelease. Estes não tem parâmetros.

A classe estática  Key proporciona a informação necessária para controlar o teclado dentro destes eventos, do mesmo modo  que a classe Mouse dentro dos eventos do mouse.

O evento KeyPress é cancelável com a instrução STOP EVENT, de modo que podemos impedir, por exemplo, que em uma caixa de texto imprimam determinados caracteres.

O seguinte exemplo, bloqueia um TextBox, de forma que só permita a entrada de números, e pressionar as teclas Del (apagar) e BackSpace (apagar atrás) e o tabulador para passar o foco a outro controle.

Para  chamar o STOP EVENT  quando o código da tecla pressionada não for nenhuma das desejadas.

 'Gambas class file
PUBLIC SUB TextBox1_KeyPress()

  SELECT CASE Key.Code

  CASE 48 TO 57 'Códigos ASCII dos números
  CASE 65456 TO 65465 'teclado numérico
  CASE Key.BackSpace 'voltar
  CASE Key.Delete 'Apagar
  CASE key.Tab 'Tabulador

  CASE ELSE

  STOP EVENT
  END SELECT

  PRINT key.Code 'mostra o código da tecla pressionada

END

As constantes da classe Mouse são as mesmas para o gb.qt e gb.gtk, não obstante, seus valores numéricos são distintos. Por tanto um código bem escrito e escalável, não deve usar valores numéricos para indicar um tipo de ponteiro,  se não as constantes desta classe.

Cada controle dispõe, de mais, de uma  propriedade Cursor, que aceita uma imagem e permite desenhar um ponteiro totalmente personalizado (a partir de um arquivo .png  pu .xpm, por exemplo) para cada controle dependendo do servidor gráfico utilizado no sistema, é possível que o cursor tenham também várias cores, não só em preto e branco como os tradicionais.

A classe estática Aplicação, possui uma propriedade Busy, que é um número inteiro. Se seu valor for maior que zero, todos os controles e janelas da aplicação mostrarão o ponteiro como um relógio (indicando ao usuário que tem que esperar), independentemente do cursor empregado para cada controle. Se o valor passa a zero, retornam-se aos controles habituais.

Por outro lado, cada controle recebe evento do mouse, que podemos manipula-lo a partir do programa. Os eventos MouseDown, MouseUp, MouseWheel, determinam, respectivamente, se o usuário pressionou um botão, levantou, moveu a roda do mouse ou moveu o mouse de posição.

Dentro destes eventos, somente dentro deles,  podemos empregar a classe Mouse, para determinar que botão foi pressionado (esquerdo, direito ou central) mediante as propriedades Mouse.Left, Mouse.Right ou Mouse.Middle, que tornam o valor true se o botão correspondente foi pressionado ou levantado; a posição do mouse dentro do controle (Mouse.X e Mouse.Y ); a posição do mouse em relação ao desktop (Mouse.ScreenX e Mouse.ScreenY); assim como a movimentação sobre a roda do mouse (Mouse.Delta e Mouse.Orientation).

Na maior parte de controles, o evento MouseMove, é produzido só se ao menos um botão do mouse for pressionado pelo usuário.

Este pequeno exemplo permite mover um botão de posição dentro de um formulário, quando o usuário o arrasta enquanto mantem pressionado o botão esquerdo.

Criaremos um fomulário Form1 com um botão Button1, que inclua este código:

' Gambas class file

PRIVATE pX AS Integer
PRIVATE py AS Integer

PUBLIC SUB Button1_MouseDown()

IF Mouse.Left THEN

'Armazenamos posições iniciais
pX = Mouse.X
pX = Mouse.Y

END IF

END

PUBLIC SUB Button1_MouseMove()

  IF Mouse.Left THEN
  '********************************************************
  'deslocamos o botão de acordo com a variação de X e Y
  '********************************************************
  Button1.Move(Button1.X - px + Mouse.X, Button1.Y - pY + Mouse.Y)

  END IF

END


A diferença de outros ambiente de desenvolvimento, onde o evento recebe vários parâmetros indicando o botão, posição, etc., em Gambas tudo isso é feito a partir da informação armazenada na classe Mouse, que somente está disponível nestes eventos. 


O evento MouseDown é cancelável, o que  significa  que empregamos a  instrução  STOP EVENT dentro de seu código, evitando que se propague e, por tanto, que o controle atue em consequência, segundo seu funcionamento interno habitual (por exemplo, um botão não lançaria o evento Click se cancelarmos o MouseDown).

Outros  eventos comuns aos controles são DblClick (duplo click do mouse), Menu (pressionar o botão direito) o Click (pressionar o botão esquerdo). Alguns controles podem não dispor do evento Click.



HOME

Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)